0

只是好奇。

从 WebSphere 中看到规则:重复的生命周期回调方法 如果为一个实体生命周期事件定义了多个回调方法,则这些方法的调用顺序如下: 实体监听器中定义的生命周期回调方法:生命周期回调在实体类的实体侦听器类上定义的方法的调用顺序与 EntityListeners 注释或 XML 描述符中实体侦听器类的规范相同。监听器超类:实体监听器超类中定义的回调方法在子级之前被调用。实体生命周期方法:WebSphere® eXtreme Scale 不支持实体继承,因此实体生命周期方法只能在实体类中定义。

但它只提到了多个回调来自不同侦听器的场景。

如果在实体类中定义了一个回调(比如@PostLoad),但在侦听器中定义了另一个(也是@PostLoad)怎么办?

首先调用哪个回调方法?顺序是指定的还是依赖于提供者的?

非常感谢!

4

1 回答 1

2

首先调用监听器中的方法,然后调用实体中的回调方法。更具体地说,顺序是:

  1. 默认侦听器(在 XML 描述符中定义的侦听器)
  2. 侦听器中的方法,从超类开始,按照在 @EntityListeners 注释中定义的顺序。
  3. 实体层次结构中的回调方法,从最上面的超类开始。

调用顺序在 JPA 2.0 规范3.5 Entity Listeners and Callback Methods中有详细说明(并带有说明性示例) 。

于 2013-01-16T21:01:09.663 回答