我有以下实体:
@Entity
public class Foo {
@ManyToOne(optional = false) // I've tried @OneToOne also, same result
@JoinColumn(name = "bar_id")
private Bar bar;
// this is a business key, though not mapped as unique for legacy reasons
@Column(nullable = false)
private long fooNo;
// getters/setters + other properties
}
@Entity
public class Bar {
@OneToOne(optional = true, mappedBy = "bar", cascade = CascadeType.ALL)
private Foo foo;
// getters/setters + other properties
}
注意:这是正确的映射:@ManyToOne 和 @OneToOne(不是我设计的)。我也在双方都尝试过@OneToOne,结果相同。
基本上,我可以有一个没有 Foo 对象的 Bar,但是每次我有一个 Foo 时,都必须有一个与之关联的 Bar。Foo 被认为是父对象(这就是为什么它是关联的所有者),但 Bar 在某些情况下可以独立存在。
然后我加载一个Foo
像这样的对象:
SELECT f FROM Foo f WHERE f.fooNo = :fooNo
foo.getBar()
Bar
正如预期的那样,正确地获取适当的 。然而,foo.getBar().getFoo()
是null
。这种关系的另一面似乎没有被 JPA/hibernate 正确初始化。任何想法为什么会发生这种情况以及我该如何解决?
我使用 Hibernate 3.2.1 作为我的 JPA 实现,我们通过 EJB3 bean 使用它(尽管这可能无关紧要)。