在JPA实体上实现"触摸"?

Nic*_*men 1 java mysql hibernate jpa

在我们的基本实体类(所有实体派生自)中,我们拥有2种方法.一个annotatted,@PrePersist其中基本上只设置dateCreated,另一个注释@PreUpdate用于设置dateUpdated字段.

这非常有效,因为我们不希望dateUpdated在创建时设置该字段.作为设计的一部分,我们还制作了两种方法,protected以便其他开发人员不会明确地弄乱那两个日期(也没有设置者).

此外,我们可以很容易地扩展任何实体,dateUpdated通过在实际实体上定义方法并在其上添加注释来设置创建字段@PrePersist,因此本部分将被涵盖.

现在,我的问题是,有一种情况我们希望显式更新dateUpdated实体上的字段,而不会更改任何数据(基本上就是touch这样).这样做有一种优雅的方式吗?我真的不想实现一个方法来改变其中一个字段然后再将其更改.我们希望在没有setter方法的情况下继续使用这些字段.

谢谢!

JB *_*zet 6

您是否尝试过更改dateUpdated字段值?我想这应该将实体修改为Hibernate,而Hibernate将调用@PreUpdate将该dateUpdated字段设置回当前时间的方法:

public void touch() {
    this.dateUpdated = -1;
}
Run Code Online (Sandbox Code Playgroud)