0

ちょっと興味があるんだけど。

WebSphereからのルールを見た:ライフサイクルコールバックメソッドの重複エンティティライフサイクルイベントに複数のコールバックメソッドが定義されている場合、これらのメソッドの呼び出しの順序は次のとおりです。エンティティリスナーで定義されたライフサイクルコールバックメソッド:ライフサイクルコールバックエンティティクラスのエンティティリスナークラスで定義されているメソッドは、EntityListenersアノテーションまたはXML記述子でのエンティティリスナークラスの指定と同じ順序で呼び出されます。リスナースーパークラス:エンティティリスナーのスーパークラスで定義されたコールバックメソッドは、子の前に呼び出されます。エンティティのライフサイクルメソッド:WebSphere®eXtremeScaleはエンティティの継承をサポートしていないため、エンティティのライフサイクルメソッドはエンティティクラスでのみ定義できます。

ただし、複数のコールバックが異なるリスナーからのものであるというシナリオについてのみ言及しました。

1つのコールバック(たとえば@PostLoad)がエンティティクラスで定義されていて、別のコールバック(@PostLoadも)がリスナーから定義されている場合はどうなりますか?

どのコールバックメソッドが最初に呼び出されますか?シーケンスは指定されていますか、それともプロバイダーに依存していますか?

どうもありがとう!

4

1 に答える 1

2

リスナーのメソッドが最初に呼び出され、次にエンティティのコールバックメソッドが呼び出されます。具体的には、順序は次のとおりです。

  1. デフォルトのリスナー(XML記述子で定義されたリスナー)
  2. @EntityListenersアノテーションで定義されている順序でスーパークラスから開始する、リスナーのメソッド。
  3. 最上位のスーパークラスから始まる、エンティティ階層のコールバックメソッド。

呼び出し順序は、JPA 2.0仕様、3.5エンティティリスナーおよびコールバックメソッドで詳細に(そして明確な例とともに)指定されています。

于 2013-01-16T21:01:09.663 に答える