Hibernate jpa 注解 @PrePersist 和 @PreUpdate

@PrePersist注解 和 @PreUpdate注解基本介绍

用于为相应的生命周期时间指定回调方法。可以用来在使用jpa的时记录一些业务无关的字段,比如最后更新时间等等。

注: 只能用来注解方法(且无返回 无参数) ,不能用于注解属性。

 

具体应用

1,如:(给一张表加上create_date,update_date这样的字段,想实现自动保存,更新这两个字段)

    private Date lastUpdateAt;

    @PrePersist
    public void recordUpdateTime(){
        lastUpdateAt = new Date();
    }

而在SpringBoot中已经封装好一个SuperEntity,

在我们的实体类中,直接继承BaseEntity,包含了id,createDate,modifyDate,数据库字段对应好即可。

Hibernate jpa 注解 @PrePersist 和 @PreUpdate

Hibernate jpa 注解 @PrePersist 和 @PreUpdate

 


2,实际应用:在持久化之前自动填充实体属性。

    @PrePersist
    @PreUpdate
    public void preTest() {
        if (getParent() != null) {
            setParentCodePath(Objects.toString(getParent().getParentCodePath(), "") + "/" + getParent().getCode());
            setParentCode(getParent().getCode());
        }

        if (CollectionUtils.isNotEmpty(getChildren())) {
            setChildrenSize(getChildren().size());
        }
    }


 

详细介绍

@PrePersist
可帮助我们在持久化之前自动填充实体属性。


可以用来在使用jpa的时记录一些业务无关的字段,比如最后更新时间等等。 
生命周期方法注解(delete没有生命周期事件)


@PreUpdate
用于为相应的生命周期事件指定回调方法。 
    该注释可以应用于实体类,映射超类或回调监听器类的方法。 用于setter

如果要每次更新实体时更新实体的属性,可以使用@PreUpdate注释。 
    使用该注释,您不必在每次更新用户实体时显式更新相应的属性。

preUpdate不允许您更改您的实体。 您只能使用传递给事件的计算的更改集来修改原始字段值。     
    如果你检查数据库,你会看到,Person实体已经更新,不会看到它们在$ persons变量,直到下次手动检索它们。

在刷新后,您必须执行的操作是从数据库中检索实体以查看其更新值:


参考来源于:

https://blog.csdn.net/sunrainamazing/article/details/80818754?utm_source=blogxgwz2