java:什么时候jpa中的回滚失败?

时间:2018-05-07 13:51:25

标签: java jpa rollback

我使用JPA并在调用函数之前开始事务,然后将某些数据存储到数据库中。然后在执行函数调用后结束事务。但我也使用entityManager.flush()和entityManager.clear()来猜测使用clear()释放内存。在结束交易之前。请纠正我。当我执行程序时,它无法回滚。

我也尝试删除flush()和clear(),但我还是无法回滚。当我使用clear and flush时,在我的场景中何时可以回滚失败?

1 个答案:

答案 0 :(得分:2)

  

我也使用entityManager.flush()和entityManager.clear()猜测   使用clear()将释放内存。

你应该停止猜测并开始阅读一些文档。

EntityManagertx.commit()上自行刷新,实体管理器在关闭时清除。 如果您正在使用容器管理器事务,则不应担心刷新和清除实体管理器。如果您使用的是JavaSE,则使用DB的正常工作流程应如下所示:

  1. 创建新的实体管理器
  2. 开始交易
  3. 做你的工作 - 删除/更新/插入任何
  4. 如果需要,提交事务/回滚
  5. 关闭实体经理
  6. 通常这会在小try-catch-finally

    中关闭

    EntityManager是轻量级的短生活组件。您应该在需要时创建一个,并在使用后立即关闭它。 什么应该是单例实例,并且创建(大多数情况下)只有EntityManagerFactory