【发布时间】:2013-01-21 06:59:15
【问题描述】:
在 JPA 2 中,可以使用 @PrePersist 之类的注解声明多少个方法,这些方法的执行顺序是什么?有时我们也会为监听器创建不同的类,并使用@EntityListener注解将这个类应用到实体上,并且我们也在实体中声明方法,那么这些方法的执行顺序是什么?
【问题讨论】:
标签: java hibernate jpa orm annotations
在 JPA 2 中,可以使用 @PrePersist 之类的注解声明多少个方法,这些方法的执行顺序是什么?有时我们也会为监听器创建不同的类,并使用@EntityListener注解将这个类应用到实体上,并且我们也在实体中声明方法,那么这些方法的执行顺序是什么?
【问题讨论】:
标签: java hibernate jpa orm annotations
关于调用顺序,JPA 2 规范第 3.5 节规定:
如果有多个实体监听器 被定义,它们被调用的顺序由它们被指定的顺序决定 在 EntityListeners 注释中。 XML 描述符可以用作替代 指定实体侦听器的调用顺序或覆盖元数据注释中指定的顺序。
关于是否对同一生命周期事件使用多种方法,JPA 2 规范在第 3.5 节中声明:
对于同一个生命周期事件,一个类不能有多个生命周期回调方法。同一个方法可以用于多个回调事件。
【讨论】:
一个@PrePersist注解的方法可以声明在:
@EntityListener 注释引用的侦听器。顺序在 JPA 2.2 规范的 3.5.5 部分(JPA 2.0 规范中的 3.5.4)中定义,总结如下:
@EntityListeners 以它们出现在实体类的注解上的顺序定义。如果存在实体层次结构,则在超类中引用的侦听器在子类中引用的侦听器之前执行。【讨论】: