2016-10-25 16 views
0

遅延ロードされ、OneToMany関係で使用されている場合、toString() Hibernateモデルクラスのメソッドに属性のエントリを入れますか?Hibernate - OneToMany関係

class Employee { 
    private Set<IiopUrl.Address> addressDetailsSet; 
    //getters and setters 

    @OneToMany(cascade = {CascadeType.ALL}) 
    @LazyCollection(LazyCollectionOption.TRUE) 
    @JoinTable(name = "Employee_Address_Map", 
      joinColumns = {@JoinColumn(name = "Employee_ID", referencedColumnName = "INNER_ID")}, 
      inverseJoinColumns = {@JoinColumn(name = "Address_Id", referencedColumnName = "INNER_ID")}, 
      uniqueConstraints = @UniqueConstraint(columnNames = {"Employee_ID", Address_Id})) 
    public Set<IiopUrl.Address> getAddressDetailsSet() { 
     return addressDetailsSet; 
    } 
} 
+0

コードはサンプルコードです。署名のために気にしないでください。 – rajvineet

答えて

1

期待通り、答えは「それに依存します」です。あなたのロジックには、関係を含める必要があるtoString()に依存する必要がある場合があります。

しかし、このような属性を含むほとんどの場合、問題が発生します。 toString()は通常、関係は次のような問題に遭遇することを含む、(などのデバッグ時、例えば、ロギングに)異なる診断状況で使用されています

  1. あなたはtoString()外トランザクション境界を呼び出すと、実行時例外が原因でそこでスローされますlazyフェッチのためのセッション(Hibernateの用語で)はありません。

  2. 通常、エンティティは巨大なオブジェクトグラフを形成する関係にリンクされているため、曖昧に関係をtoString()に含めると、大量のデータを取得することになり、多くの問題が発生する可能性があります。

私の個人的な経験には、密接に関連している関係のみが含まれます。本当に必要かどうかわからない場合は、むしろ関係を除外したいと思います。 toString()を診断目的のために保つだけです。ビジネスロジックに文字列表現が必要な場合は、そのような目的で新しいメソッドとインターフェイスを宣言することを検討してください。

関連する問題