JPA:事务已在数据库中提交,但@Version不会递增

尤塞比乌斯

我在JavaEE应用程序中使用JPA。我有一个持久性实体Stamp每次更新后每次尝试删除它时,我都会不断获取OptimisticLockExceptionThe object [domain.Stamp@473f5e6] cannot be merged because it has changed or been deleted since it was last read)。

看来,尽管版本是在数据库中提交的,但是版本号从未在对象中递增(在DB中是递增的),因此,随后进行的任何合并尝试(以更新或删除)都会触发该异常。

基本上,该场景如下:

  1. 实例化新的Stamp s
  2. em.persist(s); (数据库和对象中的版本均为1)
  3. 更新s;
  4. em.merge(s); (版本在DB中为2,在对象中为1)
  5. em.remove(this.em.merge(s));

显然,有些事情我不理解。为什么尽管进行了数据库提交,对象版本仍未更新?

MWiesner

您错过了em.merge(s);将返回的合并Stamp实例的s事实s'因此,s'将在步骤4之后保留新版本。在您的方案中,版本字段将/应等于2)。令人遗憾的是,对象(s的原始版本在其过时的对象状态下不会反映出更改(保留在数据库中)。

之后,您可以在第5步中使用该实例的该版本(s'Stamp将其删除。注意:em.merge(s)尽管第5步中的第二个操作不是必需的,因为-如果merge正确使用了第4步中操作的先前返回值-保留上一次更新的更改:不仅反映在数据库中,还反映在对象(s'的状态中

另请参见:javax.persistence.EntityManager.merge(...)

返回:状态被合并到的托管实例

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

提交的数据不会存储在数据库中,提交后我将被重定向

来自分类Dev

是否可以在数据库级别设置无锁或事务隔离级别未提交读?

来自分类Dev

如何不在数据库中提交但选择修改后的数据

来自分类Dev

JPA和Hibernate是否自动更新数据库,而无需事务开始和提交

来自分类Dev

来自MVC应用程序的输入未在数据库中提交

来自分类Dev

Mongoengine:检查文档是否已在数据库中

来自分类Dev

在数据库中递增IntegerField计数器

来自分类Dev

Spring JPA-删除子元素不会反映在数据库表中

来自分类Dev

hibernate/Spring JPA 的 save 方法不会在数据库中保存记录

来自分类Dev

在数据库事务中用于包装方法的注释

来自分类Dev

在数据库事务中读取查询

来自分类Dev

JPA @Version版本-在数据库中增加,但是使用较小的版本来更新记录

来自分类Dev

Capybara功能测试不提交数据库事务

来自分类Dev

如何使数据库自动提交所有事务

来自分类Dev

Django 在事务结束前提交到数据库

来自分类Dev

提交的数据未存储在数据库中

来自分类Dev

提交的数据未存储在数据库中

来自分类Dev

数据不会在数据库中更新

来自分类Dev

在已在数据库中获取的数据旁边对表编号

来自分类Dev

激活链接以允许在Django中提交数据库

来自分类Dev

行不会在数据库中更新

来自分类Dev

如何检测该用户名已在数据库中使用

来自分类Dev

猫鼬:模式搜索的vaildate部分已在数据库中

来自分类Dev

如果已在数据库中选择,则消除 Selected 选项...?

来自分类Dev

Spring Boot Data JPA @Version在创建时返回0,但在数据库中为1

来自分类Dev

使用AJAX提交表单不会过帐到数据库

来自分类Dev

模拟数据库事务?

来自分类Dev

JPA不会删除数据库行

来自分类Dev

Spring + JPA:不会从数据库中获取对象

Related 相关文章

  1. 1

    提交的数据不会存储在数据库中,提交后我将被重定向

  2. 2

    是否可以在数据库级别设置无锁或事务隔离级别未提交读?

  3. 3

    如何不在数据库中提交但选择修改后的数据

  4. 4

    JPA和Hibernate是否自动更新数据库,而无需事务开始和提交

  5. 5

    来自MVC应用程序的输入未在数据库中提交

  6. 6

    Mongoengine:检查文档是否已在数据库中

  7. 7

    在数据库中递增IntegerField计数器

  8. 8

    Spring JPA-删除子元素不会反映在数据库表中

  9. 9

    hibernate/Spring JPA 的 save 方法不会在数据库中保存记录

  10. 10

    在数据库事务中用于包装方法的注释

  11. 11

    在数据库事务中读取查询

  12. 12

    JPA @Version版本-在数据库中增加,但是使用较小的版本来更新记录

  13. 13

    Capybara功能测试不提交数据库事务

  14. 14

    如何使数据库自动提交所有事务

  15. 15

    Django 在事务结束前提交到数据库

  16. 16

    提交的数据未存储在数据库中

  17. 17

    提交的数据未存储在数据库中

  18. 18

    数据不会在数据库中更新

  19. 19

    在已在数据库中获取的数据旁边对表编号

  20. 20

    激活链接以允许在Django中提交数据库

  21. 21

    行不会在数据库中更新

  22. 22

    如何检测该用户名已在数据库中使用

  23. 23

    猫鼬:模式搜索的vaildate部分已在数据库中

  24. 24

    如果已在数据库中选择,则消除 Selected 选项...?

  25. 25

    Spring Boot Data JPA @Version在创建时返回0,但在数据库中为1

  26. 26

    使用AJAX提交表单不会过帐到数据库

  27. 27

    模拟数据库事务?

  28. 28

    JPA不会删除数据库行

  29. 29

    Spring + JPA:不会从数据库中获取对象

热门标签

归档