8.12.2 エンティティクラスの作成要件
JPAを使用したアプリケーションを作成する場合には,JPA仕様で決められたエンティティクラスの作成要件やデータベースのマッピング要件を守る必要があります。作成要件を次に示します。
-
エンティティクラスは@EntityまたはO/Rマッピングファイルの<entity>タグに指定する必要があります。
-
エンティティクラスは引数なしのコンストラクタを持ちます。
-
enumやインタフェースはエンティティクラスとしてはいけません。
-
エンティティクラスのクラス階層のルートとなるエンティティまたはマップドスーパークラスでは,プライマリキーを持つ必要があります。プライマリキーは,エンティティ階層で必ず一つ定義してください。
-
エンティティクラスのインスタンスを値渡しでメソッドの引数として渡す場合,Serializableインタフェースを実装する必要があります。
-
データベースのカラムの状態はエンティティのインスタンス変数で表現し,インスタンス変数はJavaBeanのプロパティに対応します。なお,インスタンス変数は,クライアントから直接アクセスして値を変更してはいけません。アクセサメソッド(getter/setterメソッド)や,ビジネスメソッド経由で値を変更してください。
-
エンティティの永続インスタンス変数は,private,protected,またはpackageから参照できるアクセスレベルにしてください。
-
引数なしのコンストラクタは,publicかprotectedで宣言してください。
-
エンティティクラスはfinalにしないでください。また,エンティティクラスの永続化インスタンス変数とすべてのメソッドもfinalにしてはいけません。
CJPAプロバイダでは,これらの条件に合わない場合,例外が発生するおそれがあります。なお,例外が発生しない場合でもこれらの条件に合わないエンティティクラスを作成している場合の動作は保証しません。
また,CJPAプロバイダの場合,エンティティクラスでは,データベースの一つのカラムを複数のフィールドに対応づけないでください。この条件に合わない場合,アプリケーション実行時に例外が発生することがあります。例外が発生しない場合でも,動作は保証しません。