使用Hibernate Criteria时搜索结果中的额外实体

时间:2014-09-25 19:06:47

标签: hibernate hibernate-criteria detachedcriteria

我的课程活动,字段为 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。 请帮助我,我做错了什么?

1 个答案:

答案 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));