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

发布于:2024-04-30 ⋅ 阅读:(32) ⋅ 点赞:(0)


@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) {
        // 修改后做的事情...
    }



}

网站公告

今日签到

点亮在社区的每一天
去签到