我想出了一个有趣的情况,我已经知道如何解决,但我想知道是否有一些优雅的解决方案。
我有一个实体,它不能有@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 ,那将无法工作。(没有我可以使用的版本字段,并且日期的类型错误)。
顺便提一句。使用 EclipseLink。