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 进行重新赋值的操作。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
java.lang.Long cannot be cast to ja
本文主要介绍了java.lang.Long cannot be cast to java.lang.Integer数据类型转换异常解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-07-07MyBatisPlus中@TableField注解的基本使用
这篇文章主要介绍了MyBatisPlus中@TableField注解的基本使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-07-07SpringCloud Config分布式配置中心使用教程介绍
springcloud config是一个解决分布式系统的配置管理方案。它包含了 client和server两个部分,server端提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client端通过接口获取数据、并依据此数据初始化自己的应用2022-12-12
最新评论