现在我已经尝试在我的数据库中执行查询了四天。
这是问题所在:
我能够轻松获得没有用户的组(我做了一个左连接),我的问题在于第二部分,获得所有用户为生日更新的组。
到目前为止,这是我的代码:
Criteria c = session.createCriteria(Group.class);
c.createAlias("userCollection", "u", Criteria.LEFT_JOIN);
c.add(Restrictions.or(Restrictions.isNull("userCollection"),
Restrictions.isNull("u.birthDate")));
这样可以正常工作,但是当组中的用户的birthDate不为null时,该组仍会出现在查询中,因为该组中的其他人具有null生日。我想我需要使用不在,对吧?
如果有人可以提供帮助,我尝试了很多,但我得到了空指针异常。
答案 0 :(得分:2)
执行此操作的最简单方法是排除具有非空birthDate
用户的组,该组同时处理这两个条件(由于内部联接,没有用户的组将不在此列表中)。
所以,比如:
DetachedCriteria excludedGroups = DetachedCriteria.forClass(Group.class);
excludedGroups.createAlias("userCollection", "u");
excludedGroups.add(Restrictions.isNotNull("u.birthDate"));
excludedGroups.setProjection(Projections.id());
Criteria c = session.createCriteria(Group.class);
c.add(Subqueries.propertyNotIn("id", excludedGroups));
顺便说一下,通过HQL这样做会更容易。