それは私の一日を苦痛にしています。
私は HQL の初心者で、SQL 文を HQL に変換していました。
SQL文はさほど複雑ではなく、こんな感じです。
SELECT t.teamworkerdid, COUNT(t.teamworkerdid), SUM(NVL(p.percentagework, 1))
FROM WORKER_TEAM t
LEFT JOIN PARTIAL_WORK p
ON (t.teamworkerdid = p.idworkerteam)
WHERE
( e.startwork <= CURRENT_DATE
AND
e.finishwork >= CURRENT_DATE);
テーブル WORKER_TEAM には、PARTIAL_WORK テーブルの外部キーであるすべてのワーカー ID があります。しかし、W_T にあるすべてのチーム ワーカーが P_T テーブルにあるわけではありません。これは、100% 作業しているワーカーが部分的な作業テーブルにエントリを持っていないためです。これが、1 つのオプションで左結合と NVL を使用する理由です。
データベースのテーブル名と POJO の変数の間ですべての変換を行いました。SELECT COUNT(t.teamworkerdid) FROM WORKER_TEAM t, PARTIAL_WORK p WHERE (t.teamworkerdid = p.idworkerteam)のようなものです が、HQL では (var 名は変更しませんみんなを混乱させるからです)。
OK、自然な結合は正常に機能します*強調されたテキスト*、コンソールで HQL depuration 出力を有効にして、正常に機能する SQL 文を取得します。
問題は、HQL で LEFT JOIN を実行しようとしたときに発生し、暗黙の自然結合を LEFT JOIN で変更するだけで、ON SQL キーワードの代わりに WITH キーワードを使用すると、プログラムがクラックして例外がスローされます。HQLにはNULLセルの生成に問題がありますが、これは私が間違っていることです。
前もって感謝します。
PD NVL が HQL で機能しないことはわかっています。代替は *coalesce(column_name, 'asdf')* です。