1

JPA 2 では、次のようなアノテーションを使用して宣言できるメソッドの数@PrePersistと、これらのメソッドが実行される順序を教えてください。リスナー用に別のクラスを作成し、アノテーションを使用してこのクラスをエンティティに適用し@EntityListener、エンティティでメソッドを宣言することもありますが、これらのメソッドの実行順序は何ですか?

4

2 に答える 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) で定義されており、要約すると次のようになります。

  1. XML 記述子で定義されている順序でのグローバル リスナー
  2. @EntityListenersエンティティ クラスの注釈に表示される順序で定義されます。エンティティ階層がある場合、スーパークラスで参照されるリスナーは、サブクラスで参照されるリスナーの前に実行されます。
  3. エンティティ クラスのライフサイクル メソッド。エンティティ階層がある場合、スーパークラスで宣言されたライフサイクル メソッドは、サブクラスで宣言されたメソッドの前に実行されます。
于 2021-01-07T13:34:07.817 に答える