软件编程
位置:首页>> 软件编程>> java编程>> JPA中EntityListeners注解的使用详解

JPA中EntityListeners注解的使用详解

作者:张占岭  发布时间:2023-08-04 21:39:18 

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

来源:http://www.cnblogs.com/lori/p/10243256.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com