Hibernate有条件地subCriteria

时间:2012-03-22 16:58:24

标签: 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(Restrictions.or(Restrictions.eq("group", null), Restrictions.eq("gmembers.snuserId", user.getId())));

1 个答案:

答案 0 :(得分:6)

好的,我为我找到了一个解酒: 首先我创建了一个分离的条件,它找到用户所在的所有组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)
                    )
            );

希望它有助于某人