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

使用Hibernate条件时搜索结果中的额外实体,hibernate,hibernate-criteria,detachedcriteria,Hibernate,Hibernate Criteria,Detachedcriteria,我有一个带有字段链接的类事件: 我需要搜索所有具有非空sourceKey字段的all链接房间的所有事件 我在DAO中使用了Hibernate标准: public List<Event> search(EventSearchCriteria searchCriteria) { Criteria criteria = getCurrentSession().createCriteria(clazz); criteria.setResultTransformer(Crite

我有一个带有字段链接的类事件

我需要搜索所有具有非空sourceKey字段的all链接房间的所有事件

我在DAO中使用了Hibernate标准:

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();
}
公共列表搜索(EventSearchCriteria searchCriteria)
{
Criteria=getCurrentSession().createCriteria(clazz);
criteria.setResultTransformer(criteria.DISTINCT\u ROOT\u实体);
标准:createAlias(“LinkedRoom”、“lr”);
添加(Restrictions.isNotNull(“lr.sourceKey”);
返回条件。list();
}
但我得到的事件至少有一个链接房间,且sourceKey不为null。
请帮帮我,我做错了什么?

以下是解决我问题的方法:

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));
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();
}
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));