日期:2014-05-16  浏览次数:20405 次

JPA注解详解(五)

?

@EntityListeners

可以使用生命周期批注(请参阅生命周期事件批注 )指定实体中的方法,这些方法在指定的生命周期事件发生时执行您的逻辑。

使用 @EntityListeners 批注将一个或多个实体监听程序类与 @Entity @MappedSuperclass 关联,条件是您需要在指定的生命周期事件发生时执行逻辑,以及:

  • 不希望在实体 API 中公开生命周期监听程序方法。
  • 要在不同的实体类型之间共享生命周期监听程序逻辑。

当实体或子类上发生生命周期事件时,JPA 持续性提供程序将按监听程序定义的顺序通知每个实体监听程序,并调用使用相应的生命周期事件类型进行批注的实体监听程序方法(如果有)。

实体监听程序类具有以下特征:

  • 它是一个普通的旧式 Java 对象 (POJO)
  • 它有一个或多个具有以下签名的回调方法:

public void <MethodName>(Object)

可以指定参数类型 Object ,或实体监听程序将与其关联的实体类的类型。

  • 它用一个或多个生命周期事件批注对每个回调方法进行批注。

一个生命周期事件只能与一个回调监听程序方法关联,但某个给定的回调监听程序方法可以与多个生命周期事件关联。

如果使用实体监听程序,则可以管理哪些实体监听程序使用 @ExcludeDefaultListeners @ExcludeSuperclassListeners 调用。

表 1-12 列出了此批注的属性。有关更多详细信息,请参阅 API

1-12 @EntityListeners 属性

属性

必需

说明

value

必需

?

要为 @Entity @MappedSuperclass 指定实体监听程序类的列表,请将 value 设置为实体监听程序类的 Class 数组。

?

示例 1-21 显示了如何使用此批注将实体监听程序类 EmployeePersistListener (请参阅