java - 如果实体本身的实体监听方法和生命周期回调重复怎么办?

标签 java jakarta-ee jpa

只是好奇。

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

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

如果在实体类中定义了一个回调(例如 @PostLoad),但在监听器中定义了另一个回调(也称为 @PostLoad),会怎么样?

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

非常感谢!

最佳答案

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

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

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

关于java - 如果实体本身的实体监听方法和生命周期回调重复怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14348849/

相关文章:

java - 寻找轻量级 Java 堆栈来创建基于 SOAP 的 Web 服务

java - 假设有2个类A和B,是否可以在B中创建A的对象,在A中创建B的对象?

javascript - 被设计问题困扰

java - 在 Enum 数据类型中保存特殊字符

java - JPA - 通过外键获取数据

java - JPA 与规范 - 如何通过子集合内容过滤实体?

java - 使用 Opencv Android 实现分水岭分割时出错

java - 在 Java 中传递多维 POST 数据

eclipse - Eclipse Kepler中缺少动态Web项目选项

java - 找出加载类的数量