我使用JPA并在调用函数之前开始事务,然后将某些数据存储到数据库中。然后在执行函数调用后结束事务。但我也使用entityManager.flush()和entityManager.clear()来猜测使用clear()释放内存。在结束交易之前。请纠正我。当我执行程序时,它无法回滚。
我也尝试删除flush()和clear(),但我还是无法回滚。当我使用clear and flush时,在我的场景中何时可以回滚失败?
答案 0 :(得分:2)
我也使用entityManager.flush()和entityManager.clear()猜测 使用clear()将释放内存。
你应该停止猜测并开始阅读一些文档。
EntityManager
在tx.commit()
上自行刷新,实体管理器在关闭时清除。
如果您正在使用容器管理器事务,则不应担心刷新和清除实体管理器。如果您使用的是JavaSE,则使用DB的正常工作流程应如下所示:
通常这会在小try-catch-finally
块
EntityManager
是轻量级的短生活组件。您应该在需要时创建一个,并在使用后立即关闭它。
什么应该是单例实例,并且创建(大多数情况下)只有EntityManagerFactory