0

我有以下实体:

@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 使用它(尽管这可能无关紧要)。

4

1 回答 1

0

你确定你的协会吗?ManyToOne 通常意味着 oneToMany 对其他。

于 2012-11-30T13:30:04.263 回答