0

1 対 1 の休止状態アノテーション マッピングがあります。たとえばのように。

     @Entity
     @Table(name="person")
     class Person{
       @OneToOne( mappedBy = "person", cascade = CascadeType.ALL)    
       private Passport passport;
       ......
     }

     @Entity
     @Table(name="passport")
     class Passport{
     @OneToOne
     @JoinColumn(name = "statusid")
     private Person person;
     ......
     .....
     }

ここPersonに所有され、Passport所有者です。selectで操作を実行するpersonと、休止状態が select frompersonとの 2 つのクエリを起動するのはなぜですかpassport。休止状態のドキュメントによると

the owner is responsible for the association column(s) update
4

2 に答える 2

0

hibernate がここで行うこと (1 対 1 のマッピングで) を追加した -cascad all フィールドのために、2 つのクエリが起動されます。.すべての参照フィールドのデータをもたらします。

1-id=3 の人物を 1 人選択するとします。

2-次に、daoレイヤーに次の構文のメソッドがあります

Person finbyid(Integer personid) { ......... ........ 人を返す; }

3-および対応するSQLクエリは次のようになります

select * from Person where id=3;

4- ここで hibernate はもう 1 つのことを行います-

それに関連付けられているすべてのパスポート オブジェクトも表示されます。

Passport pass=person.getPassport(); を実行できます。

Passport の pass オブジェクトにはすべての列が含まれるようになりました。別のクエリは実行されません。. pass.getPassportid(); を直接使用できます。pass.getPassportnumber();

など。あなたの疑いが晴れることを願っています

于 2012-09-03T10:16:13.033 に答える
0

関係の所有者の概念は、あなたの問題とは関係ありません。ドキュメントのヒントから抜粋したように、関係を永続化するときに所有側が参照されます。関係の反対側が遅延ロードされているという意味ではありません。

ユース ケースに必要なのは、1 対 1 の関係の遅延読み込みです。残念ながら、Hibernate はそれをサポートしていません。この制限を回避するための典型的なハックは、一方が 1 対 1 で、もう一方が 1 対多 (遅延) の関係を定義することです。

于 2012-09-02T17:04:48.003 に答える