Hibernate 休眠条件次标准

Hibernate 休眠条件次标准,hibernate,conditional,subquery,criteria-api,Hibernate,Conditional,Subquery,Criteria Api,我需要转换此HQL: FROM Appointment a WHERE (a.group==null OR :user MEMBER OF a.group.groupMembers) 符合标准。我如何证明仅当主标准不匹配时才使用次标准 我试过类似的方法,但我被卡住了: Criteria subcrit = crit.createCriteria("group"); subcrit.createAlias("groupMembers", "gmembers"); crit.add(Restri

我需要转换此HQL:

FROM Appointment a WHERE (a.group==null OR :user MEMBER OF a.group.groupMembers) 
符合标准。我如何证明仅当主标准不匹配时才使用次标准

我试过类似的方法,但我被卡住了:

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

好的,我找到了一个解决方案: 首先,我创建了一个分离的条件,用于查找用户所在的所有组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)
                    )
            );
希望它能帮助别人