java - java:jpa 中的回滚何时会失败?
问题描述
我正在使用 JPA,并在调用函数之前开始事务,该函数又将一些数据存储到数据库中。然后在执行函数调用后结束事务。但我也使用 entityManager.flush() 和 entityManager.clear() 猜测使用 clear() 会释放内存。在结束交易之前。请纠正我。当我执行程序时,它无法回滚。
我还尝试删除flush()和clear(),但我仍然无法回滚。当我使用清除和刷新时,回滚何时会失败?
解决方案
我还使用 entityManager.flush() 和 entityManager.clear() 猜测内存将在使用 clear() 时被释放。
好吧,您应该停止猜测并开始阅读一些文档。
EntityManager
自行刷新tx.commit()
,并且实体管理器在关闭时被清除。如果您正在使用容器管理器事务,则不必担心刷新和清除实体管理器。如果您使用的是 JavaSE,那么您使用 DB 的正常工作流程应如下所示:
- 创建新的实体管理器
- 开始交易
- 做你的工作 - 删除/更新/插入任何东西
- 如果需要,提交事务/回滚
- 关闭实体管理器
通常这将在小块中try-catch-finally
关闭
EntityManager
是轻量级和短寿命的组件。您应该在需要时创建一个,并在使用后立即关闭它。应该是一个单例实例,并且只创建一次(大多数情况下)是EntityManagerFactory
推荐阅读
- javascript - 将引导程序下拉默认文本替换为所选选项的文本
- jquery - 将折叠按钮添加到列表
- api - OVER_QUERY_LIMIT 地理编码
- css - 如何在 Header 下放置不同风格的阴影?
- ios - 自定义 segue 到导航控制器层次结构中的特定子视图
- windows - 组装 如何将 ntoskrnl 绑定到我的汇编语言对象?
- php - Laravel 5 表单模型绑定单选按钮
- assembly - 有人能告诉我我的 MIP 翻译成英文好不好?
- python-3.x - 在 Python 中匹配和转置数据
- javascript - 我的 Javascript 倒数计时器无法正常工作