JPA 2:使用@Prepersist注释在一个实体中允许多少个方法?

时间:2013-02-06 06:32:08

标签: java hibernate jpa orm annotations

在jpa 2中,home使用@prepersist等注释来声明这些方法,并按顺序执行这些方法。有时我们还为侦听器创建了不同的类,并使用@EntityListener注释在实体上应用此类,并且我们还在实体中声明了方法,那么执行这些方法的顺序是什么?

2 个答案:

答案 0 :(得分:3)

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

  

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

关于使用多种方法进行相同生命周期事件的问题,JPA 2规范在第3.5节中说明:

  

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

答案 1 :(得分:0)

可以在以下位置声明 SELECT userName, userPassword FROM umbracoUser WHERE id = 0 注释方法:

  • 实体类或其任何实体或映射超
  • 上默认监听全局声明的XML描述符
  • 在与@PrePersist anotation在实体类和他的任何实体或超映射的引用的听众

的顺序在JPA 2.2规范(3.5.4在JPA 2.0规范)的3.5.5节中定义,并总结这将是:

  1. 的顺序它们在XML描述符中定义的全球听众
  2. @EntityListener在它们出现在对实体类注释的顺序定义。如果有关于超类引用的实体hieararchy听众在子类中所引用的侦听器之前被执行。
  3. 在实体类生命周期方法。如果有一个实体hieararchy,生命周期方法对超类宣布子类声明的方法之前执行。