JPA @PrePersist& LockModeType.OPTIMISTIC_FORCE_INCREMENT

时间:2013-06-07 12:32:34

标签: jpa eclipselink

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

我有一个实体,无法拥有 @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。

0 个答案:

没有答案