Java 实施";触摸“;关于JPA实体?

Java 实施";触摸“;关于JPA实体?,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,Jpa,在我们的基本实体类(所有实体都从中派生)中,我们有两个方法。一个用@PrePersist注释,它基本上只设置创建日期,另一个用@PreUpdate注释,它设置日期更新字段 这非常有效,因为我们不希望在创建时设置dateUpdated字段。作为设计的一部分,我们还使这两个方法受到保护,这样其他开发人员就不会去显式地干扰这两个日期(也没有设置器) 此外,通过在实际实体上定义一个方法并用@PrePersist对其进行注释,我们可以很容易地扩展任何实体,以便在创建时设置dateUpdated字段,因此我

在我们的基本实体类(所有实体都从中派生)中,我们有两个方法。一个用
@PrePersist
注释,它基本上只设置
创建日期
,另一个用
@PreUpdate
注释,它设置
日期更新
字段

这非常有效,因为我们不希望在创建时设置
dateUpdated
字段。作为设计的一部分,我们还使这两个方法
受到保护
,这样其他开发人员就不会去显式地干扰这两个日期(也没有设置器)

此外,通过在实际实体上定义一个方法并用
@PrePersist
对其进行注释,我们可以很容易地扩展任何实体,以便在创建时设置
dateUpdated
字段,因此我们将介绍这一部分

现在,我的问题是,在这种情况下,我们希望显式地更新实体上的
dateUpdated
字段,而不更改其上的任何数据(基本上是
touch
it)。有没有一种优雅的方法?我真的不想实现一个方法,改变它的字段之一,然后改变回来。我们希望这些字段的实体没有setter方法


谢谢

用@Version注释dateUpdated字段,删除预更新回调并在提交事务之前使用em.lock(entity,LockModeType.WRITE)。请记住,为了强制更新版本列,需要管理该实体

使用@version注释dateUpdated字段,删除预更新回调,并在提交事务之前使用em.lock(实体,LockModeType.WRITE)。请记住,为了强制更新版本列,需要管理该实体

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

public void touch() {
    this.dateUpdated = -1;
}

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

public void touch() {
    this.dateUpdated = -1;
}

我认为这对我们不起作用。实体上已经有一个版本字段。另外,version字段并不是严格意义上的日期,它是一个表示为日期的整数。我认为这对我们不起作用。实体上已经有一个版本字段。另外,version字段并不是严格意义上的日期,它是一个表示为日期的整数。我记得以前读过这篇文章。我会试试的,谢谢。效果很好,谢谢!(除了不能执行
this.dateUpdated=-1
之外,因为您不能将
int
分配给
Date
字段,但是
this.dateUpdated=null
可以100%工作)。很棒的东西。我记得以前读过这篇文章。我会试试的,谢谢。效果很好,谢谢!(除了不能执行
this.dateUpdated=-1
,因为您不能将
int
分配给
Date
字段,但是
this.dateUpdated=null
可以100%工作)。