2012-02-08 7 views
1

hibernateで保持されているクラスのコンストラクタのSetを初期化する際に問題はありますか?Hibernateコンストラクタ

オブジェクトが休止状態でロードされると、そのセットは空であっても初期化されるため、つまり空のセットに過ぎないため、.equal実装に問題があります。新しく構築されたオブジェクトでは、それらはnullです。私はこれが等しいメソッドで扱うことができるが、それはちょっと混乱していることが分かっているので、nullは空のセットと実際には等しくありません。

パフォーマンスの観点から、クラスのSetプロパティ(新しいHashSetなどを作成する)を初期化してから、それらを再初期化する必要がないと考えた場合は、コンストラクタを省略した理由(私はそれを推測していますか?)。

これについて心配する必要はありませんし、コンストラクタ内のセットのデータ構造を初期化する必要がありますか?新しいインスタンスを手動で初期化する場合に特別なコンストラクタを作成することもできます。

+2

"パフォーマンス...私は推測しています" ---それは間違っています。最初にプロファイルを作成し、必要に応じて最適化します:) –

答えて

5

オブジェクトには不変式が存在する必要があり、これらの不変式の1つは、コレクションがnullでないことです。空にすることはできますが、nullにすることはできません。だから、コンストラクタから空のセットをインスタンス化する必要があります。

これを実行するコストは、Hibernateが行う作業、データベースへのネットワーク呼び出しなどと比較して無視できる程度です。パフォーマンスの違いに気付かないでしょう。

0

メンバ変数宣言でSetを初期化し、デフォルトのゼロ引数のコンストラクタを使用し、パフォーマンスについて心配しないでください。データベースのヒットとネットワークトラフィックは、空のセットを作成することから生じるオーバーヘッドを完全になくします。

関連する問題