>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 15221 个阅读者 刷新本主题
 * 贴子主题:  【持久化专题】JPA的事件处理API的用法 回复文章 点赞(0)  收藏  
作者:sunweiqin    发表时间:2021-05-05 11:28:30     消息  查看  搜索  好友  邮件  复制  引用

本文参考《精通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对象的最新更新时间。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小




程序猿的技术大观园:www.javathinker.net





[这个贴子最后由 admin 在 2021-10-09 10:41:02 重新编辑]
  Java面向对象编程-->接口
  JavaWeb开发-->使用Session(Ⅰ)
  JSP与Hibernate开发-->第一个helloapp应用
  Java网络编程-->用Spring整合CXF发布Web服务
  精通Spring-->虚拟DOM和render()函数
  Vue3开发-->创建综合购物网站应用
  【Vue.js技术专题】在Vue项目中使用Axios
  【Spring Cloud Alibaba专题】Seata的架构
  【Spring Cloud Alibaba专题】按照集群模式搭建Redis集群
  【Spring Cloud Alibaba专题】Dubbo框架中提供者回调消费者
  【Spring专题】服务器端推送
  【Spring专题】把Model的数据存放在session范围
  【Spring专题】@Query和@Modifying注解的增删改操作
  【Vue专题】Vue3的计算属性实用范例:实现购物车
  【持久化专题】用orphanRemoval属性映射父子关系
  【Java网络编程专题】用java.net.URL类访问HTTP服务器读取网...
  【Java网络编程专题】盘点用Java抓取HTTP服务器和FTP服务器的...
  【持久化专题】通过JPQL查询语句进行批量处理数据
  【JavaWeb专题】Spring MVC创建Web应用范例,轻松入门
  【Java基础编程专题】Java基本类型和引用类型的三个区别
  【Java基础编程专题】Java继承的利弊和使用原则
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。