我想出了一些有趣的情况,我已经知道如何解决,但我想知道是否有一些优雅的解决方案。
我有一个实体,无法拥有 @Versio 字段,因为它基于旧数据库,并且该表没有列可以使用此类值。
基本上是这样的:
@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 ,那么由于遗留数据库而无法使用 @Version 。 (我没有可以使用的版本字段,日期的类型错误。)
顺便说一下。使用EclipseLink。