java - 如何在 EJB-JPA tx 中停止自动提交
问题描述
我有一个无状态的 EBJ,我正在使用 JPA 来管理数据库交互。以下是我需要您帮助的情况。
- EJB 收到获取数据的调用 (getCustomer())。
- GetCustomer 用于使用 JPA 从数据库中读取客户实体。
- 客户实体有一种从属性中删除空格的方法。这是用@PostLoad 注释的。基本上,这会修改持久性上下文中的实体。
现在,当向客户端发送响应时(事务完成后),它会向数据库触发更新 SQL 以更新数据集(在步骤 3 中修改)。
如果你能看到这个操作,它本质上是只读的。但是由于我的数据有很多空格,因此我必须在实体对象中对其进行修剪。但是这种方法正在触发一个不期望的更新 SQL。
您能否让我知道解决此问题的最佳方法或如何隔离和同步)EJB tx 和 JPA tx。
解决方案
没有必要搞乱事务管理来实现您的要求。
您的代码应在从 DAO 返回之前调用javax.persistence.EntityManager.clear() 。这会将您的实体 bean 从持久性上下文中分离出来,而持久性上下文将不再跟踪它。从java文档:
清除持久性上下文,导致所有托管实体分离。对尚未刷新到数据库的实体所做的更改将不会被持久化。
推荐阅读
- reactjs - 我的日期功能不适用于 Firefox,但适用于 chrome
- django - Django:如何在新模板中的另一个模型上使用 CreateView 的 form_valid() 返回的响应?
- reactjs - Reactjs 应用程序无法使用 https 请求访问我的 Spring Boot 后端
- linux - 为什么 Gradle 在我的 Kotlin 多平台项目中的 :linkDebugTestLinux 上失败?
- ionic-framework - Ionic 4 App 192.168.8.200 无法在移动设备上运行
- sql-server - T-SQL 从查找表中获取值并在视图/存储过程中使用
- excel - 在VBA中将字符串插入公式
- groovy - XPATH 输入标签查询 - Katalon Studio
- java - CodeCache 初始化。mtCode 参数传递给 new,但在 GrowableArray 构造函数中使用了 mtInternal
- php - 如何在客户端使用 Paypal API v2 进行验证