EJB 3.0(Public Draft)入門記 Java Persistence API Chapter2 その1

Chapter2とりあえずその1です。いったい何分割になるんだろう。

Chapter2 Entities

エンティティは軽量な永続的ドメインオブジェクトだとあります。軽量なというのはたぶんPOJOで作れるよということだと思います。
プログラマが作るべきものは主にエンティティクラスですが、エンティティクラスはヘルパークラスやエンティティの状態を表すクラスなどの補助的なクラスを使うかもしれないらしいです。

補助的なクラスってEntityManagerも入るんでしょうか。今のところそれ以外は思いつかないです。

2.1 Requirements on the Entity Class

エンティティクラスの要件です。箇条書きにしてみます。

  • エンティティクラスはEntityアノテーションでアノテートされるかデプロイメント記述でエンティティと指定されなければいけない。
  • エンティティクラスは引数なしのコンストラクタをもたなければいけない。引数なしコンストラクタはpublicもしくはprotectedでなければいけない。
  • もしエンティティのインスタンスがデタッチドオブジェクト(detached object)として値渡しされるならばエンティティクラスはSerializableインタフェースを実装しなければいけない。
  • エンティティクラスはfinalであってはいけない。エンティティクラスのメソッドはfinalにできない。
  • エンティティは継承、ポリモーフィックな関連(?)、ポリモーフィックなクエリ(?)をサポートする。
  • エンティティは具象クラスでも抽象クラスでもOK。
  • エンティティはエンティティでもエンティティでないクラスでも継承できる。また、エンティティでないクラスがエンティティを継承してもよい。
  • エンティティの状態はインスタンス変数で表され、インスタンス変数はJavaBeansのプロパティに対応する。インスタンス変数はエンティティのメソッド内からだけ直接アクセスできて、エンティティのクライアントからはアクセッサーやビジネスメソッド経由でなければアクセスされていはいけない。インスタンス変数の可視性はprivateかprotectedかpackageアクセスでなければいけない。

ポリモーフィックな関連とかポリモーフィックなクエリとかって何かわかりませんです。いずれ詳しく出てくると思いますのでそのときまで放っておくとします。
意外なのは、インスタンス変数がpublicじゃだめだということです。HibernateはpublicでもOKでクライアントから直接さわれたような気がするんですが(まともに触ったことないので詳しく知らないです...)。今日はこのことがわかっただけでもなんかよかったかも。あとビジネスメソッドという言葉がでてきましたが、たぶんアクセッサー以外のロジックを持つメソッドということですね。

今日は以上。あんまり進んでないけど。次回は2.1.1 Persistent Field and Propertiesからです。