首页 > 解决方案 > 如何在 EJB-JPA tx 中停止自动提交

问题描述

我有一个无状态的 EBJ,我正在使用 JPA 来管理数据库交互。以下是我需要您帮助的情况。

  1. EJB 收到获取数据的调用 (getCustomer())。
  2. GetCustomer 用于使用 JPA 从数据库中读取客户实体。
  3. 客户实体有一种从属性中删除空格的方法。这是用@PostLoad 注释的。基本上,这会修改持久性上下文中的实体。

现在,当向客户端发送响应时(事务完成后),它会向数据库触发更新 SQL 以更新数据集(在步骤 3 中修改)。

如果你能看到这个操作,它本质上是只读的。但是由于我的数据有很多空格,因此我必须在实体对象中对其进行修剪。但是这种方法正在触发一个不期望的更新 SQL。

您能否让我知道解决此问题的最佳方法或如何隔离和同步)EJB tx 和 JPA tx。

标签: javajpatransactionsejb

解决方案


没有必要搞乱事务管理来实现您的要求。

您的代码应在从 DAO 返回之前调用javax.persistence.EntityManager.clear() 。这会将您的实体 bean 从持久性上下文中分离出来,而持久性上下文将不再跟踪它。从java文档:

清除持久性上下文,导致所有托管实体分离。对尚未刷新到数据库的实体所做的更改将不会被持久化。


推荐阅读