JPA中EntityListeners注解的使用详解

 更新时间:2019年01月09日 14:31:03   作者:张占岭  
这篇文章主要介绍了JPA中EntityListeners注解的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

使用场景

EntityListeners在jpa中使用,如果你是mybatis是不可以用的

它的意义

对实体属性变化的跟踪,它提供了保存前,保存后,更新前,更新后,删除前,删除后等状态,就像是拦截器一样,你可以在拦截方法里重写你的个性化逻辑。

它的使用

定义接口,如实体追踪

/**
 * 数据建立与更新.
 */
public interface DataEntity {

 Timestamp getDateCreated();

 void setDateCreated(Timestamp dateCreated);

 Timestamp getLastUpdated();

 void setLastUpdated(Timestamp lastUpdated);

 Long getDateCreatedOn();

 void setDateCreatedOn(Long dateCreatedOn);

 Long getLastUpdatedOn();

 void setLastUpdatedOn(Long lastUpdatedOn);

}

定义跟踪器

@Slf4j
@Component
@Transactional
public class DataEntityListener {
 @PrePersist
 public void prePersist(DataEntity object)
   throws IllegalArgumentException, IllegalAccessException {
  Timestamp now = Timestamp.from(Instant.now());
  object.setDateCreated(now);
  object.setLastUpdated(now);
  logger.debug("save之前的操作");
 }

 @PostPersist
 public void postpersist(DataEntity object)
   throws IllegalArgumentException, IllegalAccessException {

  logger.debug("save之后的操作");
 }

 @PreUpdate
 public void preUpdate(DataEntity object)
   throws IllegalArgumentException, IllegalAccessException {
  Timestamp now = Timestamp.from(Instant.now());
  object.setLastUpdated(now);
  logger.debug("update之前的操作");
 }

 @PostUpdate
 public void postUpdate(DataEntity object)
   throws IllegalArgumentException, IllegalAccessException {
  logger.debug("update之后的操作");
 }

 @PreRemove
 public void preRemove(DataEntity object) {
  logger.debug("del之前的操作");

 }

 @PostRemove
 public void postRemove(DataEntity object) {
  logger.debug("del之后的操作");

 }
}

实体去实现这个对应的跟踪接口

@EntityListeners(DataEntityListener.class)
public class Product implements DataEntity {
   @Override
 public Timestamp getDateCreated() {
  return createTime;
 }

 @Override
 public void setDateCreated(Timestamp dateCreated) {
  createTime = dateCreated;
 }

 @Override
 public Timestamp getLastUpdated() {
  return lastUpdateTime;
 }

 @Override
 public void setLastUpdated(Timestamp lastUpdated) {
  this.lastUpdateTime = lastUpdated;
 }

 @Override
 public Long getDateCreatedOn() {
  return createOn;
 }

 @Override
 public void setDateCreatedOn(Long dateCreatedOn) {
  createOn = dateCreatedOn;
 }

 @Override
 public Long getLastUpdatedOn() {
  return lastUpdateOn;
 }

 @Override
 public void setLastUpdatedOn(Long lastUpdatedOn) {
  this.lastUpdateOn = lastUpdatedOn;
 }
}

上面代码将实现在实体保存时对 createTime , lastUpdateTime 进行赋值,当实体进行更新时对 lastUpdateTime 进行重新赋值的操作。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 如何使用hutool做本地缓存的工具类

    如何使用hutool做本地缓存的工具类

    这篇文章主要介绍了如何使用hutool做本地缓存的工具类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 在es中查询null值的操作方法

    在es中查询null值的操作方法

    在我们向es中写入数据时,有些时候数据写入到es中的是null,或者没有写入这个字段,那么这个时候在es中该如何查询出这种为null的数据呢,本文给大家详细讲解,需要的朋友参考下吧
    2023-02-02
  • 举例讲解Java设计模式编程中模板方法模式的运用实例

    举例讲解Java设计模式编程中模板方法模式的运用实例

    这篇文章主要介绍了Java设计模式编程中模板方法模式的运用实例,模板方法模式强调基于继承的代码复用,需要的朋友可以参考下
    2016-05-05
  • springboot+dubbo+zookeeper的简单实例详解

    springboot+dubbo+zookeeper的简单实例详解

    本文主要介绍了springboot+dubbo+zookeeper的简单实例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Java线程的start方法回调run方法的操作技巧

    Java线程的start方法回调run方法的操作技巧

    面试过程中经常会被面试官问到为什么我们调用start()方法时会执行run()方法,为什么不能直接调用run()方法,问的一头雾水,今天小编给大家介绍下Java线程的start方法回调run方法的操作技巧,需要的朋友参考下吧
    2017-11-11
  • java观察者模式的三种实现方式代码实例

    java观察者模式的三种实现方式代码实例

    这篇文章主要介绍了java观察者模式的三种实现方式代码实例,观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,需要的朋友可以参考下
    2023-10-10
  • 简单谈谈Java遍历树深度优先和广度优先的操作方式

    简单谈谈Java遍历树深度优先和广度优先的操作方式

    这篇文章主要介绍了简单谈谈Java遍历树深度优先和广度优先的操作方式的相关资料,需要的朋友可以参考下
    2023-03-03
  • 浅谈hibernate急迫加载问题(多重外键关联)

    浅谈hibernate急迫加载问题(多重外键关联)

    这篇文章主要介绍了浅谈hibernate急迫加载问题(多重外键关联),具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • 单机redis分布式锁实现原理解析

    单机redis分布式锁实现原理解析

    这篇文章主要介绍了单机redis分布式锁实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Spring JPA学习之delete方法示例详解

    Spring JPA学习之delete方法示例详解

    这篇文章主要为大家介绍了Spring JPA学习delete方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04

最新评论