2012-03-22 20 views
2

私はこのHQLを変換する必要があります。どのように主題が一致していない場合にのみ、副基準が使用されることを達成することができますか?Hibernateは条件付きではsubCriteria

私はそのような何かを試してみましたが、私はこだわっている:

Criteria subcrit = crit.createCriteria("group"); 
subcrit.createAlias("groupMembers", "gmembers"); 
crit.add(Restrictions.or(Restrictions.eq("group", null), Restrictions.eq("gmembers.snuserId", user.getId()))); 

答えて

6

[OK]を、私は私のためにsoulutionが見つかりました:: は、最初のiは、ユーザーがメンバーであるすべてのグループIDを見つけ戸建基準を作成しました私の主な基準について次に

DetachedCriteria subquery = DetachedCriteria.forClass(Group.class); 
subquery.createAlias("groupMembers", "gm"); 
subquery.add(Restrictions.eq("gm.userId", user.getId())); 
subquery.setProjection(Projections.property("id")); 

crit.add(
      Restrictions.or(
        Restrictions.isNull("group"), 
        Subqueries.propertyIn("group.groupId", subquery) 
        ) 
      ); 

は、それが誰かの役に立てば幸い