JPA@PrePersist&;LockModeType.Optimization\u力\u增量
我提出了一个有趣的情况,我已经知道如何解决,但我想知道是否有一些优雅的解决方案 我有一个实体,它不能有@Versio字段,因为它是基于一个遗留数据库的,并且表中没有列可以有这种值 基本上是这样的:JPA@PrePersist&;LockModeType.Optimization\u力\u增量,jpa,eclipselink,Jpa,Eclipselink,我提出了一个有趣的情况,我已经知道如何解决,但我想知道是否有一些优雅的解决方案 我有一个实体,它不能有@Versio字段,因为它是基于一个遗留数据库的,并且表中没有列可以有这种值 基本上是这样的: @Entity public class MyEntity { @Id private int id; @Temporal(TemporalType.DATE) private java.util.Date lastUpdated; } 这基本上只是用于EULA(最终
@Entity
public class MyEntity {
@Id
private int id;
@Temporal(TemporalType.DATE)
private java.util.Date lastUpdated;
}
这基本上只是用于EULA(最终用户许可协议)检查。
我希望更新必须重新接受eula的日期(新的eula日期来自其他地方)
为此,我计划使用:
@PrePersist
@PreUpdate
protected void setPersistTime() {
this.lastUpdated = new Date();
}
当第一次存储实体时,@PrePersist被正确地调用,但是在随后的时间里,JPA似乎认为实体与以前一样,并且不会调用@PreUpdate,因为没有什么可以更改的
我打算用
em.refresh(myEntity, LockModeType.OPTIMISTIC_FORCE_INCREMENT);
但是如果没有@Version,我将无法使用它,因为它是遗留数据库。(没有我可以使用的版本字段,日期的类型不对)
顺便说一句,使用EclipseLink。解决方案当然只是手动更新此值(或删除旧值并重新插入),但我只是好奇,是否真的有办法使用“JPA stuff”来实现这一点?并且只是添加。。。当我手动设置日期时,它实际上会被@PreUpdate.:)更新