0

最適化したいHQLクエリが機能しています。それは次のとおりです。

select distinct A.id from Import as A, Place D 
where (A.place=D or A.placeBOK=D) and D.country=? 

I tried to replcae the query from above by the following:

select distinct A.id from Import as A
where A.place.country=? or A.placeBOK.country=?

パフォーマンスに加えて、両方のクエリは同等だと思いました。しかし、そうではありません。1つ目は20個のオブジェクトのセットを配信するのに対し、2つ目は14個のオブジェクトのみを配信します。

私は何が間違っているのですか?

ヒントはありますか?

4

2 に答える 2

1

[更新しました]

クエリを次のように書き換える必要があります

select distinct A.id from Import as A LEFT JOIN A.place b LEFT JOIN A.placeBOK c
where b.country=? or c.country=?

2 番目のクエリは次と同等です。

select distinct A.id from Import as A INNER JOIN A.place b INNER JOIN A.placeBOK c
where b.country=? or c.country=?

以下も参照してください。

14.4. 結合構文の形式

HQL は、暗黙的な結合と明示的な結合という 2 つの形式の関連結合をサポートしています。

前のセクションで示したクエリはすべて明示的な形式を使用しており、from 句で join キーワードが明示的に使用されています。おすすめの形です。

暗黙の形式は join キーワードを使用しません。代わりに、関連付けはドット表記を使用して「逆参照」されます。暗黙的な結合は、どの HQL 句にも表示できます。暗黙的な結合は、結果の SQL ステートメントで内部結合になります。

from Cat as cat where cat.mate.name like '%s%'
于 2009-05-28T14:19:38.400 に答える
0

上記の答えはわかりませんが、クエリ A からではなくクエリ B からの結果である 6 つの結果を調査してみてください...

于 2009-05-28T15:14:52.297 に答える