我有一个基本实体类
其中一个字段(时间戳)具有@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/