2017-10-16 11 views
0

Hibernateにwhere句にサブクエリを持つクエリを生成させようとしています。私はused this answer as a base to help me goingを持っていますが、この質問は1つのテーブルだけを述べました。WHERE句と複数の結合でサブクエリを使用するHibernateクエリ

しかし、これは私が(SQLで)必要がありますものです:

SELECT [...] 
FROM a 
LEFT OUTER JOIN b on a.idb = b.idb 
LEFT OUTER JOIN c on b.idc = c.idc 
[...] 
LEFT OUTER JOIN k out on j.idk = k.idk 
WHERE k.date = (SELECT max(date) from k in where in.idk = out.idk) OR k.date is null 

私は非常にHibernateを使用して使用していないです、私は内側の制約にナビゲートしながら、これらの内部結合を指定するトラブルを抱えています。 リンクされた回答のように初期条件を再作成できましたが、条件とrootCriteriaに参加できないようです。

答えて

0

エンティティが@ManyToOneアノテーションで正しく結合されている場合、条件を前のテーブルに追加するだけで、クエリ全体に条件を反映させることができます。

次のコードは、私が探しているWHERE節を追加するために正しく動作しているようです。

DetachedCriteria kSubquery = DetachedCriteria.forClass(TableJPE.class,"j2"); 
kSubQuery = kSubQuery.createAlias("k","k2"); 
kSubQuery.setProjection(Projections.max("k2.date")); 
kSubQuery = kSubQuery.add(Restrictions.eqProperty("j.id", "j2.id")); 
rootCriteria.add(Restrictions.disjunction() 
    .add(Subqueries.propertyEq("k.date",kSubQuery)) 
    .add(Restrictions.isNull("k.date"))); 
関連する問題