1

我想出了一个有趣的情况,我已经知道如何解决,但我想知道是否有一些优雅的解决方案。

我有一个实体,它不能@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。

4

0 回答 0