King Ulysses の 帰還

2006-08-19 2.1.1 Persistent Fields and Properties

[]2.1.1 永続フィールドと永続プロパティ

エンティティの永続状態は、JavaBeansスタイルのプロパティアクセサ経由かインスタンス変数経由かのいずれかで、永続プロバイダランタイム*1によってアクセスされる。単体のアクセスタイプ(フィールドまたはプロパティアクセス)はエンティティ階層に適用される。アノテーションを使用する場合、エンティティクラスの永続フィールドか永続プロパティのいずれかのマッピングアノテーションを置くことにより、アクセスタイプをそれぞれフィールドアクセスかプロパティアクセスか指定する。

    • マッピングアノテーションが永続フィールドとプロパティとの両方に適用された場合や、XML記述子が1つのクラス階層内で異なるアクセスタイプの使用を指定した場合、動作は未確定となる。

エンティティクラスは、永続プロパティ使用時の永続プロパティ用として、JavaBeans read/writeプロパティ(JavaBeans Introspectorクラスにより定義されている通り)のメソッドシグネチャ規約に従う。

この場合、エンティティのタイプTproperty である1つ1つの永続プロパティについて、getPropertyのgetterメソッド、プラス、setPropertyのsetterメソッドが存在する。boolean型のプロパティに関しては、isProperty がgetterメソッドの別名である。*3

一価の永続プロパティに関して、これらのメソッドシグネチャは:

    • T getProperty()
    • void setProperty(T t)

となる。

Collection価の永続フィールド及びプロパティは、次に挙げるCollection価のインタフェースの中の一つという点から定義され、エンティティクラスが別の方法で上述のJavaBeansメソッド規約を遵守しているかどうかや、フィールドまたはプロパティアクセスが使われているかどうかは関係ない:java.util.Collection, java.util.Set, java.util.List*4, java.util.Map*5

*1:「永続プロバイダランタイム」という用語は永続実装のランタイム環境を指す。JavaEE環境では、これをJava EEコンテナかまたはそれと統合されたサードパーティ製の永続プロバイダとすることも可とする。

*2:これらのアノテーションはsetterメソッドに適用されてはならない。

*3:具体的に述べると、getXがgetterメソッドの名前でsetXがsetterメソッドの名前である場合、Xには1つの文字列が入るが、永続プロパティjava.beans.Introspector.decapitalize(X)の結果により定義される。

*4:移植可能なアプリケーションは、OrderByコンストラクトが使われ且つリストに対する改修が指定の順序付けを観察するのでない限り、永続のコンテクストを超えてリストの順序が保たれることを想定すべきではない。順序はさもなければ永続ではない。

*5:この実装形式は、エンティティが永続となされる前にフィールドまたはプロパティを初期化する目的でアプリケーションにより使用される;一度エンティティが管理される(または分離される)ようになったら、その後のアクセスはインタフェース型を通じてでなければならない。

2006-08-18 2.1 Requirements on the Entity Class

[]2.1 エンティティクラス要件

エンティティクラスは、Entityアノテーションを使用して注釈するか、または、1エンティティとしてXML記述子内で示さなければならない。

エンティティクラスには引数なしコンストラクタが存在しなければならない。それ以外にコンストラクタが存在することも可とする。引数なしコンストラクタは、publicかprotectedでなければならない。

エンティティクラスは、最上位のクラスでなければならない。

エンティティクラスは、finalであってはならない。

エンティティクラス内のメソッド及び永続的なインスタンス変数は、finalであってはならない。

エンティティインスタンスが分離したオブジェクトとして(例:リモートインタフェース経由で)値渡しされる場合、エンティティクラスはSerializableインタフェースを実装しなければならない。

エンティティは、継承と多義的な関連と多義的なクエリとをサポートする。

抽象クラスも具象クラスもエンティティになり得る。エンティティが非エンティティクラスを継承することも、エンティティがエンティティクラスを継承することも可とし、非エンティティクラスがエンティティクラスを継承することも可とする。

エンティティの永続状態は、複数のインスタンス変数によって表される。それらの変数Java Beansプロパティに対応することも可とする。インスタンス変数が、エンティティインスタンス自身により、エンティティのメソッド内からのみ直接アクセスされるようにすることも可とする。インスタンス変数に、エンティティのクライアントからアクセスしてはならない。エンティティの状態は、エンティティのアクセサメソッド(getter/setterメソッド)か、または、他のビジネスメソッドを通じてのみ、クライアントから取得可能とする。インスタンス変数は、privateかprotectedかpackageの可視性でなければならない。

Connection: close