1

在 JPA 2 中,可以使用注释声明多少个方法,@PrePersist以及这些方法的执行顺序?有时我们也会为监听器创建不同的类,并使用@EntityListener注解将这个类应用到实体上,我们也在实体中声明方法,那么这些方法的执行顺序是什么?

4

2 回答 2

4

关于调用顺序,JPA 2 规范第 3.5 节指出:

如果定义了多个实体侦听器,则调用它们的顺序由它们在 EntityListeners 注释中指定的顺序决定。XML 描述符可用作指定实体侦听器的调用顺序或覆盖元数据注释中指定的顺序的替代方案。

关于是否对同一生命周期事件使用多种方法,JPA 2 Spec 在第 3.5 节中指出:

对于同一个生命周期事件,一个类不能有多个生命周期回调方法。相同的方法可以用于多个回调事件。

于 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 回答