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,注解
0
投稿

猜你喜欢

  • 教你怎么使用hadoop来提取文件中的指定内容

    2021-07-08 02:22:50
  • C#中GDI+绘制圆弧及圆角矩形等比缩放的绘制

    2022-06-14 21:15:05
  • 一文带你真正理解Java中的内部类

    2023-11-24 20:42:07
  • 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
  • idea +junit单元测试获取不到bean注入的解决方式

    2022-12-09 05:59:27
  • Java Date时间类型的操作实现

    2023-11-25 06:44:31
  • spring-boot-maven-plugin引入出现爆红(已解决)

    2021-06-06 12:05:35
  • Spring Boot整合Lombok的方法详解

    2023-11-22 09:06:21
  • 解析Java的设计模式编程之解释器模式的运用

    2022-01-04 04:02:18
  • Java多线程实现Runnable方式

    2022-06-29 17:09:46
  • Android实现计步器功能

    2023-12-24 14:06:21
  • Android Studio缓存文件夹配置教程

    2022-11-28 12:04:51
  • Android自定义控件之电话拨打小键盘

    2022-11-17 21:52:08
  • 详解Android中的MVP架构分解和实现

    2022-11-30 08:06:29
  • 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
  • asp之家 软件编程 m.aspxhome.com