JPA中EntityListeners注解的使用详解
作者:张占岭 时间:2023-08-04 21:39:18
使用场景
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
标签:JPA,EntityListeners,注解
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
教你怎么使用hadoop来提取文件中的指定内容
2021-07-08 02:22:50
![](https://img.aspxhome.com/file/2023/7/77077_0s.png)
C#中GDI+绘制圆弧及圆角矩形等比缩放的绘制
2022-06-14 21:15:05
![](https://img.aspxhome.com/file/2023/3/89823_0s.png)
一文带你真正理解Java中的内部类
2023-11-24 20:42:07
![](https://img.aspxhome.com/file/2023/3/60073_0s.png)
PowerManagerService之手动灭屏流程示例分析
2023-01-13 17:11:51
Android编程中context及全局变量实例详解
2023-11-17 05:58:40
jar命令的用法详解
2022-08-14 13:37:28
Android Gradle依赖管理、去除重复依赖、忽略的方式
2023-06-08 16:07:12
![](https://img.aspxhome.com/file/2023/7/137937_0s.jpg)
idea +junit单元测试获取不到bean注入的解决方式
2022-12-09 05:59:27
![](https://img.aspxhome.com/file/2023/6/110876_0s.jpg)
Java Date时间类型的操作实现
2023-11-25 06:44:31
![](https://img.aspxhome.com/file/2023/0/59370_0s.jpg)
spring-boot-maven-plugin引入出现爆红(已解决)
2021-06-06 12:05:35
![](https://img.aspxhome.com/file/2023/7/98117_0s.png)
Spring Boot整合Lombok的方法详解
2023-11-22 09:06:21
![](https://img.aspxhome.com/file/2023/7/85497_0s.jpg)
解析Java的设计模式编程之解释器模式的运用
2022-01-04 04:02:18
![](https://img.aspxhome.com/file/2023/5/63755_0s.jpg)
Java多线程实现Runnable方式
2022-06-29 17:09:46
Android实现计步器功能
2023-12-24 14:06:21
Android Studio缓存文件夹配置教程
2022-11-28 12:04:51
![](https://img.aspxhome.com/file/2023/9/139079_0s.png)
Android自定义控件之电话拨打小键盘
2022-11-17 21:52:08
![](https://img.aspxhome.com/file/2023/8/89518_0s.jpg)
详解Android中的MVP架构分解和实现
2022-11-30 08:06:29
![](https://img.aspxhome.com/file/2023/0/139080_0s.png)
springboot+spring data jpa实现新增及批量新增方式
2023-01-27 03:45:53
C#中结构(struct)的部分初始化和完全初始化实例分析
2021-11-01 16:33:36
解决Callable的对象中,用@Autowired注入别的对象失败问题
2023-11-29 13:23:46