持续存在JPA @Version值

时间:2014-12-31 09:12:12

标签: java jpa eclipselink optimistic-locking

我正在为数据库实体对象使用JPA和@Version属性。

事实是,我有一个领域" ENTITY_VERSION"在DB映射到@Version,但我在xml中有这个ENTITY_VERSION表示blob类型中的所有对象。

@Version值是在记录持久化后立即自行创建的:因此,xml将始终是脏的....

例如:

  1. 首先保存xml对象" x" (实体以版本1保存,例如)
  2. 坚持对象" x" (版本-ENTITY_VERSION - 自动放2)。
  3. 在表格对象x中,ENTITY_VERSION字段为2,但xml为" 1"
  4. 我尝试使用@PrePersist更新xml,获取@Version的值,但值总是旧值。

    无论如何在持久化之前得到@Version值

1 个答案:

答案 0 :(得分:2)

@Version字段仅在成功提交事务后递增。那是设计上的。但它递增

您可以确定,事务成功的唯一方法是@Version字段在数据库和事务提交时的实体中是相同的。因此,以及版本将增加的事实,您也确切地知道在成功提交(X + 1)之后它将具有什么值。这是您应该首先放入xml的值。

但是要知道,如果事务回滚,你的xml也会变脏。