孙卫琴的《精通JPA与Hibernate》的读书笔记:JPA的事件处理API的用法

JPA API也提供了处理事件的办法,它主要包括两个步骤:
(1)创建监听器类。
(2)在持久化类中通过@EntityListeners注解来注册监听器。

1.创建监听器类

监听器类不需要实现特定的接口,可以是任意的Java类,例如以下MyLastUpdateListener类就是一个监听器类。

/* MyLastUpdateListener.java */
package mypack;
import javax.persistence.*;
import java.util.*;
public class MyLastUpdateListener {

  @PreUpdate
  @PrePersist
  public void setLastUpdate( Customer customer ) {
    System.out.println("设置最新更新时间");
    customer.setLastUpdate( new Date() );
  }
}

以上MyLastUpdateListener类的setLastUpdate()方法前使用了@PreUpdate和@PrePersist注解,这两个注解指定了调用setLastUpdate()方法时机。@PreUpdate注解表示在更新实体对象之前调用setLastUpdate()方法;@PrePersist注解表示在持久化实体对象之前调用setLastUpdate()方法。

除了这两个注解,JPA还提供了以下用于指定监听方法的调用时机的注解:

@PostLoad:加载一个对象之后。
@PostPersist:持久化一个对象之后。
@PostUpdate:更新一个对象之后。
@PreRemove:删除一个对象之前。
@PostRemove:删除一个对象之后。

2.在持久化类中通过@EntityListeners注解来注册监听器

假定Customer类需要使用MyLastUpdateListener监听器,通过该监听器来设置Customer对象的lastUpdate属性。可以在Customer类中按照如下方式注册MyLastUpdateListener监听器:

@Entity
@Table(name="CUSTOMERS")
@EntityListeners( mypack.MyLastUpdateListener.class )
public class Customer implements Serializable{……}

当程序在保存或更新Customer对象之前,会触发JPA调用MyLastUpdateListener监听器的setLastUpdate()方法,该方法会更新Customer对象的lastUpdate属性,该属性表示Customer对象的最新更新时间。
孙卫琴的《精通JPA与Hibernate》的读书笔记:JPA的事件处理API的用法

上一篇:多线程的实例练习:银行账户双储户问题


下一篇:mycat分库分表示例