6.12.3 エンティティクラスのフィールドに対するアクセス方法の指定

Cosminexus JPAプロバイダは,エンティティの状態をデータベースに書き込んだり,データベースの状態をエンティティとして読み込んだりするときに,エンティティクラスのフィールドにアクセスします。このときのアクセス方法をアクセスタイプと呼びます。アクセスタイプには,プロパティとフィールドの2種類があります。また,アクセスタイプはアノテーションまたはO/Rマッピングファイルで指定します。アクセスタイプと指定方法について次の表に示します。

表6-17 アクセスタイプと指定方法

アクセスタイプ説明指定方法
アノテーションO/Rマッピングファイル
プロパティgetterメソッドを経由して取得する方法です。フィールドのgetterメソッドにアノテーションを指定します。<access>タグにPROPERTYを指定します。
フィールドインスタンス変数を直接参照する方法です。フィールドにアノテーションを指定します。<access>タグにFIELDを指定します。

アクセスタイプがプロパティの場合,エンティティが保持するプロパティを永続化プロパティといいます。また,アクセスタイプがフィールドの場合,エンティティのフィールドを永続化フィールドといいます。

アクセスタイプに関連する注意事項
アクセスタイプを指定するときには,次の点を考慮してください。
  • アクセスタイプがフィールドの場合,Cosminexus JPAプロバイダは永続化フィールドに直接アクセスします。@Transientを設定されていないインスタンス変数は,永続化の対象となります。
  • アクセスタイプがプロパティの場合,Cosminexus JPAプロバイダはアクセサメソッドを利用して永続化プロパティの値を取得します。@Transientがアクセサメソッドに設定されていないプロパティは,永続化の対象となります。
  • アクセスタイプがプロパティの場合,setterメソッドにマッピングアノテーションは設定できません。Cosminexus JPAプロバイダの場合,setterメソッドに設定したマッピングアノテーションは無視されます。
  • @TransientまたはO/Rマッピングファイルで<transient>タグが付与されたフィールドとプロパティには,マッピングアノテーションは設定できません。設定した場合には,アプリケーションの開始時に例外が発生します。
  • プロパティのアクセサメソッドはpublicまたはprotectedにしてください。これは,JPA仕様で禁止されていますが,Cosminexus JPAではチェックしません。また,privateであっても例外も発生しません。
  • 永続化フィールドと永続化プロパティのアクセサメソッドの両方にマッピングアノテーションが適用された場合,永続化プロパティのアクセサメソッドに設定されたアノテーションはすべて無視されます。