选择不存在Hibernate OneToOne关联的实体

选择不存在Hibernate OneToOne关联的实体,hibernate,Hibernate,我有两个类,它们之间有双向@OneToOne映射 Class A { @OneToOne(fetch = FetchType.Lazy, mappedBy="a") private B b; } Class B { @OneToOne(fetch = FetchType.Eager) private A a; } 我需要编写代码来检索B的所有实例,这些实例没有与之关联的A实例。我还需要为没有B的所有a编写一个类似的查询 我试过: Criteria criteria = getSession(

我有两个类,它们之间有双向@OneToOne映射

Class A {
@OneToOne(fetch = FetchType.Lazy, mappedBy="a")
private B b;
}

Class B {
@OneToOne(fetch = FetchType.Eager)
private A a;
}
我需要编写代码来检索B的所有实例,这些实例没有与之关联的A实例。我还需要为没有B的所有a编写一个类似的查询

我试过:

Criteria criteria = getSession().createCriteria(B.class)
criteria.add(Restrictions.isNull("a")

但这似乎总是返回null。想法?

这应该对两个方向都有效:

Criteria criteria = session.createCriteria(B.class, "b");
criteria.createAlias("b.a", "a", Criteria.LEFT_JOIN);
criteria.add(Restrictions.isNull("a.id"));

Hibernate中有一个记录在案的问题,即

此外,在同一问题上还有一个未决的Jira


在这个问题得到解决之前,JB Nizet提供的解决方案非常有效。

有效。无法找出为什么isNull使用OneToOne将null添加到我的查询中的错误属性中。作为
条件。LEFT\u JOIN
已取消指定,现在可以使用
条件。createAlias(“b.a”,“a”,JoinType.LEFT\u OUTER\u JOIN)