我的课程活动,字段为 linkedRooms :
public class Event
{
Set<LinkedRoom> linkedRooms;
...
}
类 LinkedRoom 包含字段 sourceKey :
public class LinkedRoom
{
Long sourceKey;
...
}
我需要搜索所有所有链接的房间且非空的sourceKey字段的事件。
我在DAO中使用了Hibernate Criteria:
public List<Event> search(EventSearchCriteria searchCriteria)
{
Criteria criteria = getCurrentSession().createCriteria(clazz);
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
criteria.createAlias("linkedRooms", "lr");
criteria.add(Restrictions.isNotNull("lr.sourceKey"));
return criteria.list();
}
但是我得到的事件至少有一个链接的房间没有null sourceKey。 请帮助我,我做错了什么?
答案 0 :(得分:1)
这是我的问题的解决方案:
DetachedCriteria todaysBook = DetachedCriteria.forClass(Event.class, "be")
.createAlias("be.linkedRooms", "belrs")
.add(Restrictions.isNull("belrs.sourceKey"))
.setProjection(Property.forName("id"));
criteria.add(Property.forName("id").notIn(todaysBook));