|  | 本文参考《精通JPA与Hibernate:Java对象持久化技术详解》,作者:孙卫琴,清华大学出版社出版 
 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对象的最新更新时间。
 
  
 
 
 
 程序猿的技术大观园:www.javathinker.net
 
 
 
 
 
 [这个贴子最后由 admin 在 2021-10-09 10:41:02 重新编辑]
 | 网站系统异常 
 
 
    
     | 系统异常信息 |  
     | Request URL: 
http://www.javathinker.net/WEB-INF/lybbs/jsp/topic.jsp?postID=3799 
 java.lang.NullPointerException
 
 如果你不知道错误发生的原因,请把上面完整的信息提交给本站管理人员。
 |  |