1

JPA/休止状態を使用しています。新しいオブジェクトを永続化しているときに、参照先フィールドのルックアップを行う必要があることに気付きました。たとえば、Person と Address と 1 対 1 の関係があるとします。そして、各アドレスが 1 人の人物のみを参照するようにします。そして、アドレスを永続化するために Person を検索する必要がある Person のプライマリキーを知っています。

@Transactional
public void saveAddressFor( Long personId, <adddress_details> ) {
   Address address = new Address();
   address.setOwner( em.getReference( Person.class, personId ) );
   address.setAddress( <address_details> );
   em.persist( address );
}

#getReference を使用して Person PKEY を知っているので、挿入時に設定するための PKEY を取得するためだけに検索する必要がないことを望んでいました。しかし、SQL トレースを調べると、トランザクションの最後に、INSERT を実行する前に実際に Person を検索していることがわかります。

このルックアップを回避する方法はありますか? それは大したことではありません。不要なだけです。可能であれば、これらを取り除きたいと思います。

4

2 に答える 2

0

あなたの使い方は正しいです。通常getReference()、DBにアクセスせずに参照オブジェクトを提供するだけです。

実際に DB からロードしているのを見ると、コード内でpersonのメソッド/属性にアクセスし、Hibernate が遅延フェッチを実行している可能性が非常に高いです。(Hibernateのバグかもしれない別の可能性もありますが、可能性は低いと思います)

于 2013-08-26T01:29:28.397 に答える