欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

JPA中EntityListeners注解的使用详解

时间:2021-06-20 08:50:21|栏目:JAVA代码|点击:

使用场景

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 进行重新赋值的操作。

上一篇:mybatis typeAliases 给实体类起别名的方法

栏    目:JAVA代码

下一篇:java el简介及用法

本文标题:JPA中EntityListeners注解的使用详解

本文地址:http://www.codeinn.net/misctech/145219.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有