【问题标题】:What if entity listener method and lifecycle callback of the entity itself duplicates?如果实体监听方法和实体本身的生命周期回调重复了怎么办?
【发布时间】:2013-01-15 23:28:46
【问题描述】:

只是好奇。

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

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

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

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

非常感谢!

【问题讨论】:

    标签: java jakarta-ee jpa


    【解决方案1】:

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

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

    JPA 2.0 规范3.5 实体监听器和回调方法中详细指定了调用顺序(并附有说明性示例)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-05
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多