2

私はこのSQLが欲しい:

SELECT COUNT(*) FROM table1 t1, table2 t2 
WHERE t1.id > 0  
AND (( t1.name = 'foo') 
    OR ( t1.id2 = t2.id AND t1.name = 'det')) 

table2 にエイリアスを使用する場合:

detachedCriteria.createAlias("table2", "t2");

次のように設定します。

detachedCriteria.add(Restrictions.eqProperty("t1.id2", "t2.id"));

Hibernate は常に SELECT クエリで不要な INNER JOIN を生成し、間違った結果をもたらします。

select count(*) as y0_ 
from
    table1 this_ 
inner join
    table2 table2_ 
        on this_.id2=table2_.id 
where 
...

SELECTではなくWHERE句(t1.id2 = t2.id)で「INNER JOIN」を実現するにはどうすればよいですか?

4

1 に答える 1

0

Criteria APIを使用すると、できません。ルートエンティティからクエリを実行し、エイリアスまたはサブ基準を作成して、それらの関連付けを介して他のエンティティに移動することしかできません。このAPIでは、2つのエンティティから同時に選択することはできません。ただし、HQLを使用することは可能です。

于 2012-10-17T18:32:25.137 に答える