【Spring Data JPA】实体对象生命周期相关注解

devtools/2024/11/15 8:41:03/

文章目录

    • @PrePersist 注解
    • @PreUpdate 注解
    • @PreRemove 注解
    • @PostLoad 注解
    • @PostPersist 注解
    • @PostRemove 注解
    • 使用案例
      • 启动类
      • Entity 对象
      • 生命周期(Listener)


@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() 方法之后被调用,表示实体对象已经成功从数据库中删除。


使用案例

启动类

java">@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 对象

java">@Getter
@Setter
@ToString
@Entity
@Table(name = "user")
// 指定生命周期 Listener
@EntityListeners(UserListener.class)
public class UserEntity implements Serializable {@Idprivate String id;@Column(name = "name")private String name;@Column(name = "create_time")private String createTime;@Column(name = "update_time")private String updateTime;}

生命周期(Listener)

java">@Component
public class UserListener {@PrePersistpublic void beforeCreate(UserEntity farmer) {// 创建前做的事情...}@PreRemovepublic void beforeRemove(UserEntity farmer) {// 删除前做的事情...}@PreUpdatepublic void beforeUpdate(UserEntity farmer) {// 修改前做的事情...}@PostLoadpublic void afterCreate(UserEntity farmer) {// 创建后做的事情...}@PostRemovepublic void afterRemove(UserEntity farmer) {// 删除后做的事情...}@PostUpdatepublic void afterUpdate(UserEntity farmer) {// 修改后做的事情...}}

http://www.ppmy.cn/devtools/24176.html

相关文章

Stable Diffusion 模型分享:Inkpunk Diffusion(动漫、墨水朋克)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 在 Dreambooth 上训练的微调稳定扩散模型。隐约受…

SpringBoot整合RabbitMQ direct交换机、fanout交换机、topic交换机

回调函数相关 SpringBoot整合RabbitMQ 回调函数 direct交换机、fanout交换机、topic交换机 PS 常见错误 1、有匹配到交换机,但是没有匹配到绑定的队列。(交换机没有绑定队列)- not route 2、没有匹配到交换机。(交换机名称错误&a…

快速构建Spring boot项目

1、Idea里新建项目 2、创建HelloController 3、运行 4、开发环境热部署 pom.xml 查看目前已有的依赖 配置properties 设置 ctrlshiftalt/ 新版本的compiler.automake.allow.when.app.running已经不在registry里面了,在settings里面的Advanced settings里面Allow au…

初识JavaScript

什么是JavaScript: JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于原型…

Rust的Clone

Clone 是 Rust 编程语言中一个核心特质(trait),位于标准库中的 std::clone 模块。Clone trait 定义了类型如何安全、明确地创建其值的深拷贝(deep copy)。实现 Clone 的类型可以使用 .clone() 方法创建现有实例的完全独…

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(Http测试板块)

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(Http测试板块) 一、使用Http网页界面1、main.cc原码和index.html原码2、运行结果(1)测试结果1:用index.html内部的代码(2&#xf…

Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理

垃圾回收(Garbage Collection, GC)是自动内存管理的关键部分,它负责识别并清除程序中不再使用的对象,从而避免内存泄漏和浪费。以下是垃圾回收中常见的几种算法的工作原理: 标记-清除(Mark-Sweep&#xff…

纯血鸿蒙APP实战开发——Navigation实现多设备适配案例

介绍 在应用开发时,一个应用需要适配多终端的设备,使用Navigation的mode属性来实现一套代码,多终端适配。 效果图预览 使用说明 将程序运行在折叠屏手机或者平板上观看适配效果。 实现思路 本例涉及的关键特性和实现方案如下&#xff1a…