文章目录
@PrePersist 注解
@PrePersist 注解用于指定在将实体对象持久化到数据库之前执行的方法。通常用于设置实体对象的初始状态或执行一些必要的操作。
标记了 @PrePersist 注解的方法会在执行 EntityManager 的 persist() 方法时触发,在持久化实体对象之前被调用。
通常用于在保存实体对象之前对对象进行一些初始化操作,比如设置默认值、生成主键等。
@PreUpdate 注解
@PreUpdate 注解用于指定在更新实体对象到数据库之前执行的方法。通常用于在更新实体对象之前进行一些额外的操作,比如更新修改时间。
标记了 @PreUpdate 注解的方法会在执行 EntityManager 的 merge() 方法时触发,在更新实体对象到数据库之前被调用。
@PreRemove 注解
@PreRemove 注解用于指定在从数据库删除实体对象之前执行的方法。通常用于在删除实体对象之前进行一些前置处理,比如执行级联删除或者删除相关的文件。
标记了 @PreRemove 注解的方法会在执行 EntityManager 的 remove() 方法时触发,在删除实体对象之前被调用。
@PostLoad 注解
@PostLoad 注解用于指定在从数据库加载实体对象完成后执行的方法。通常用于对实体对象进行一些后处理或初始化操作。
标记了 @PostLoad 注解的方法会在实体对象被加载到内存中后立即调用。
通常用于在加载实体对象后执行一些初始化操作,例如格式化数据、计算字段值等。
@PostPersist 注解
@PostPersist 注解用于指定在将实体对象持久化到数据库之后执行的方法。通常用于在保存实体对象之后执行一些后续操作,比如生成相关的日志或发送通知。
标记了 @PostPersist 注解的方法会在执行 EntityManager 的 persist() 方法之后被调用,表示实体对象已经成功持久化到数据库。
@PostRemove 注解
@PostRemove 注解用于指定在从数据库删除实体对象之后执行的方法。通常用于在删除实体对象之后执行一些清理操作,比如删除相关的缓存或记录相关的日志。
标记了 @PostRemove 注解的方法会在执行 EntityManager 的 remove() 方法之后被调用,表示实体对象已经成功从数据库中删除。
使用案例
启动类
@SpringBootApplication(
scanBasePackages = {
"com.**.listener"
}
)
@EnableJpaRepositories(
basePackages = "com.**.repository"
)
@EntityScan(
basePackages = {
"com.**.entity"
}
)
// 开启通知生命周期
@EnableJpaAuditing
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
Entity 对象
@Getter
@Setter
@ToString
@Entity
@Table(name = "user")
// 指定生命周期 Listener
@EntityListeners(UserListener.class)
public class UserEntity implements Serializable {
@Id
private String id;
@Column(name = "name")
private String name;
@Column(name = "create_time")
private String createTime;
@Column(name = "update_time")
private String updateTime;
}
生命周期(Listener)
@Component
public class UserListener {
@PrePersist
public void beforeCreate(UserEntity farmer) {
// 创建前做的事情...
}
@PreRemove
public void beforeRemove(UserEntity farmer) {
// 删除前做的事情...
}
@PreUpdate
public void beforeUpdate(UserEntity farmer) {
// 修改前做的事情...
}
@PostLoad
public void afterCreate(UserEntity farmer) {
// 创建后做的事情...
}
@PostRemove
public void afterRemove(UserEntity farmer) {
// 删除后做的事情...
}
@PostUpdate
public void afterUpdate(UserEntity farmer) {
// 修改后做的事情...
}
}