Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA@PrePersist&;LockModeType.Optimization\u力\u增量_Jpa_Eclipselink - Fatal编程技术网

JPA@PrePersist&;LockModeType.Optimization\u力\u增量

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(最终

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

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

解决方案当然只是手动更新此值(或删除旧值并重新插入),但我只是好奇,是否真的有办法使用“JPA stuff”来实现这一点?并且只是添加。。。当我手动设置日期时,它实际上会被@PreUpdate.:)更新