ヒベルナツ検索

594 ワード

以前は複雑なサブクエリはhqlでしか実現できないと思っていましたが、今日は高人が教えてくれました。Criteriaオブジェクトでも可能です。
例えば、aテーブルにはbテーブルに記録されていません。
SQL:select*from tablea a where not exists(select 1 from tableb b.here b=d=a.id and b.name=*)
ヒベルナ:

DetachedCriteria dCriteria = DetachedCriteria.forClass(TableB.class, "b").setProjection(Property.forName("id")).add(Expression.and(Restrictions.eqProperty("a.id", "b.id"), Expression.eq("b.name", name)));
Session.CreateCriteria(TableA.class,"a").add(Subqueries.notExists(dCriteria)).List();