java - @version 注释在 jpa/eclipselink 中无法正常工作

标签 java jpa eclipselink

我有一个基本实体类

其中一个字段(时间戳)具有@version属性,因此Jpa会自动增加该值。

但是,有时时间戳值没有更新,编辑日期小于创建日期,但理论上永远不会发生这种情况。

我没有以编程方式设置已编辑值。

这是我的实体类:

public class BaseEntity implements  Serializable {  

@Column(name = "CREATED")
private Timestamp created;

@Column(name = "EDITED")
@Version
private Timestamp edited;

// other fields, getters and setters

}

读过很多关于这个@version注解的文章,但我不明白为什么这个值不会更新,这背后的原因是什么。

如果有人帮助我,那就太好了

谢谢

最佳答案

以下是一些基本准则:

  • 检查您是否导入了正确的包javax.persistence.Version
  • 将更改保存到已持久化的实体时,请使用 obj =entityManager.merge(obj);
  • 切勿手动更改版本字段的值。实体管理器会处理它。

为了进一步调试,请编辑 persitence.xml 并将以下行添加到属性:

<property name="eclipselink.logging.level" value="FINE"/>
<property name="eclipselink.logging.parameters" value="true"/>
<property name="eclipselink.logging.sql.level" value="FINE"/>

这将启用精细日志记录并生成大量输出。您将能够看到更新查询以及到底发生了什么。

关于java - @version 注释在 jpa/eclipselink 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44262415/

相关文章:

java - JPA 未知 SqlResultSetMapping

maven - InvocationTargetException:javax/persistence/Persistence

jpa - Eclipselink 实体映射缓存

java - 如何在标有 CascadeType.ALL 的关系中添加持久实体?

java - Web 服务器上的 Php 或 Java

java - JPA+EJB+JSF : how can design complicated query

java - 有可能发现操作系统在线程上进行上下文切换吗?

java - JPA 中的动态 COUNT 抛出 NullPointerException

java - 从Java中的枚举获取字符串值

java - 使用 Java 对数百万个 int/string 对进行排序