我有以下实体:
@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使用它(虽然这可能无关紧要)。
答案 0 :(得分:0)
你确定你的同情吗? ManyToOne通常暗示oneToMany on other。