5.6.3 DDによる@PersistenceContext定義のオーバーライド
@PersistenceContextをアプリケーションに記載している場合に,DDで<persistence-context-ref>タグを定義していると,アノテーションで定義した内容はDDで定義した内容で上書きされます。この場合,アノテーションとDDとの対応は,@PersistenceContextのname属性と,DDの<persistence-context-ref>タグ下にある<persistence-context-ref-name>タグの対応で判断されます。なお,@PersistenceContextでname属性が明示的に指定されていない場合でも,name属性にはデフォルト値が存在するので注意が必要です。
次に@PersistenceContextに指定した属性がDDのタグでオーバーライドされるときの注意について説明します。
- 〈この項の構成〉
(1) <persistence-unit-name>タグとunitName属性
DDの<persistence-unit-name>タグは@PersistenceContextのunitName属性をオーバーライドします。通常,永続化ユニット名を変更すると,アプリケーションは動作しなくなるので,DDおよびアノテーションを定義する際には注意してください。
(2) <persistence-context-type>タグとtype属性
DDの<persistence-context-type>タグは@PersistenceContextのtype属性をオーバーライドします。通常,永続化コンテキストのライフサイクルの種類を変更すると,アプリケーションは動作しなくなるので,DDおよびアノテーションを定義する際には注意してください。
(3) <persistence-property>タグとproperties属性
DDの<persistence-property>に指定されたプロパティは,@PersistenceContextのproperties属性に指定されたプロパティに追加されます。ただし,プロパティ名が同じ場合には,プロパティ値がオーバーライドされます。
(4) <injection-target>タグ
インジェクションターゲットをオーバーライドすることはできません。なお,DDに<injection-target>タグを記述する場合には,@PersistenceContextが付加されたフィールドやメソッドを正確に指定してください。