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 によって正しく初期化されていないようです。なぜこれが起こっているのか、どうすれば修正できるのでしょうか?

JPA 実装として Hibernate 3.2.1 を使用します。これは、EJB3 Bean を介して使用しています (ただし、これはおそらく関係ありません)。

4

1 に答える 1

0

あなたの協会についてよろしいですか?ManyToOne は通常、oneToMany on other を意味します。

于 2012-11-30T13:30:04.263 に答える