【问题标题】:JPA 2: How many methods are allowed in one entity with @Prepersist annotation?JPA 2:一个带有@Prepersist 注解的实体中允许有多少种方法?
【发布时间】:2013-01-21 06:59:15
【问题描述】:

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

【问题讨论】:

    标签: java hibernate jpa orm annotations


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      一个@PrePersist注解的方法可以声明在:

      • 实体类或其任何实体或映射的超类
      • 在 XML 描述符上全局声明的默认侦听器上
      • 关于在实体类及其任何实体或映射的超类中使用 @EntityListener 注释引用的侦听器。

      顺序在 JPA 2.2 规范的 3.5.5 部分(JPA 2.0 规范中的 3.5.4)中定义,总结如下:

      1. 全局侦听器按在 XML 描述符中定义的顺序排列
      2. @EntityListeners 以它们出现在实体类的注解上的顺序定义。如果存在实体层次结构,则在超类中引用的侦听器在子类中引用的侦听器之前执行。
      3. 实体类的生命周期方法。如果存在实体层次结构,则在超类上声明的生命周期方法在子类上声明的方法之前执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-01
        • 1970-01-01
        • 2012-11-11
        • 1970-01-01
        • 1970-01-01
        • 2020-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多