JPA监听器

背景

在JPA中,我们使用Java Persistence API进行数据的持久化(增删改查),相应的该API也提供了监听数据持久化生命周期中的回调方法,比如我们通过JPA的审计功能可以插入创建者(@CreatedBy)、修改者(@LastModifiedBy)、创建时间(@CreatedDate)、最后修改时间(@LastModifiedDate)。

但是这些注解支持有的时候并不够,比如通过@CreatedBy我们在创建者这一列插入的是用户ID,但是我们的数据库中还有一列是用来保存创建者的用户名称的,这个时候就需要使用JPA的监听器。

  • @PrePersist 保存前
  • @PostPersist 保存后
  • @PreRemove 删除前
  • @PostRemove 删除后
  • @PreUpdate 更新前
  • @PostUpdate 更新后
  • @PostLoad 查询后

步骤

创建自定义监听器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class CustomerListener
{
/**
* 在保存之前调用
*/
@PrePersist
public void prePersist(Object source)
{
System.out.println("@PrePersist:" + source);
}

/**
* 在保存之后调用
*/
@PostPersist
public void postPersist(Object source)
{
System.out.println("@PostPersist:" + source);
}
}

在实体类上添加@EntityListeners注解,并指定自定义监听器

1
2
3
4
5
6
@EntityListeners({CustomerListener.class})
@Entity
@Table("t_customer")
public class Customer
{
}