[jpa:96] Re: Kuina-Dao利用時にエンティティのequals()のオーバーライドは必要でしょうか?

Nobuaki Ito [E-MAIL ADDRESS DELETED]
2008年 1月 11日 (金) 11:48:14 JST


小林さん、いつもありがとうございます。理解できました。


08/01/11 に Koichi Kobayashi <[E-MAIL ADDRESS DELETED]> さんは書きました:
>
> 小林 (koichik) です.
>
> Date:    Thu, 10 Jan 2008 23:50:22 +0900
> From:    "Nobuaki Ito" <[E-MAIL ADDRESS DELETED]>
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [jpa:90] Kuina-Dao利用時にエンティティのequals()のオーバーライドは必要でしょうか?
>
> > Kuina-Dao利用時に、エンティティクラスのequals()メソッドのオーバーライドは必要でしょうか?
>
> 必要ではありません.
>
> > 永続性という観点から、equals()はidフィールド(主キー)の一致の判定という形にすべきと、"EJB3.0プログラミング
> "(青い本)に記載があったのですが、Kuina-Daoのサンプルの方では特に触れられていないようです。
>
> JPA の仕様では,エンティティクラス自体の equals に
> ついては何も規定されていません.
> オーバーライドしろとも,してはならないとも
> 書いてないのです.
>
> @EmbeddedId や @IdClass で使われる複合主キーを
> 表すクラスについては,equals() をオーバーライドして
> (同一性ではなく) 同値性で判定するように規定されて
> いますが.
>
> 基本的に,equals() をオーバーライドするのは
> 等価性の判定に同一性ではなく同値性を使う場合ですが,
> 同値性を使うなら同時に不変であるべきです.
> # 少なくとも概念的には.
> # コレクションとか当てはまらないのも多いけど.
>
> しかし,基本的にエンティティは不変ではありません.
> であるなら,equals() はオーバーライドすべきでは
> ないということになります.
>
> 一方,主キーについてはアプリケーションが値を
> 変更してはならないと規定されています.
> つまり,複合主キーを表すクラスは概念的には
> 不変であり,equals() をオーバーライドして
> 同値性で判定するのは妥当と思われます.
>
>
> 結局は,プロジェクトとして「エンティティの等価性」を
> どう扱いたいのかによるのではないかと.
> RDB の同一のレコードにマッピングされているなら,
> もしバージョンが異なっていても「等しい」と判定
> したいのであれば,青い本のようにしても
> いいのかもしれません.
>
> Hibernate のドキュメントではまた別の方法が
> 推奨されてるので参考にどうぞ.
>
>
> http://www.hibernate.org/hib_docs/v3/reference/en/html/persistent-classes.html#persistent-classes-equalshashcode
>
>
> --
> <component name="koichik">
>     <property name="fullName">"Koichi Kobayashi"</property>
>     <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
>     <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
> </component>
>
> _______________________________________________
> jpa mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/jpa
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/jpa/attachments/20080111/a4962b89/attachment.html 


jpa メーリングリストの案内