JPA 2 では、次のようなアノテーションを使用して宣言できるメソッドの数@PrePersist
と、これらのメソッドが実行される順序を教えてください。リスナー用に別のクラスを作成し、アノテーションを使用してこのクラスをエンティティに適用し@EntityListener
、エンティティでメソッドを宣言することもありますが、これらのメソッドの実行順序は何ですか?
質問する
2937 次
2 に答える
4
呼び出しの順序に関して、JPA 2 仕様セクション 3.5 は次のように述べています。
複数のエンティティ リスナーが定義されている場合、それらが呼び出される順序は、EntityListeners アノテーションで指定された順序によって決定されます。XML 記述子は、エンティティ リスナーの呼び出し順序を指定するため、またはメタデータ アノテーションで指定された順序をオーバーライドするための代替手段として使用できます。
また、同じライフサイクル イベントに複数のメソッドを使用するかどうかについては、JPA 2 仕様のセクション 3.5 で次のように述べられています。
1 つのクラスが、同じライフサイクル イベントに対して複数のライフサイクル コールバック メソッドを持つことはできません。複数のコールバック イベントに同じメソッドを使用できます。
于 2013-02-06T07:36:57.863 に答える
0
アノテーション付き@PrePersist
メソッドは、以下で宣言できます。
- エンティティークラスまたはそのエンティティーまたはマップされたスーパークラスのいずれか
- XML記述子でグローバルに宣言されたデフォルトのリスナー
- エンティティ クラスのアノテーションで参照されるリスナーと
@EntityListener
、そのエンティティまたはマップされたスーパークラスのいずれか。
順序は JPA 2.2 仕様の 3.5.5 セクション (JPA 2.0 仕様の 3.5.4) で定義されており、要約すると次のようになります。
- XML 記述子で定義されている順序でのグローバル リスナー
@EntityListeners
エンティティ クラスの注釈に表示される順序で定義されます。エンティティ階層がある場合、スーパークラスで参照されるリスナーは、サブクラスで参照されるリスナーの前に実行されます。- エンティティ クラスのライフサイクル メソッド。エンティティ階層がある場合、スーパークラスで宣言されたライフサイクル メソッドは、サブクラスで宣言されたメソッドの前に実行されます。
于 2021-01-07T13:34:07.817 に答える