gpt4 book ai didi

hibernate - 选择给定数据时防止刷新 EntityManager

转载 作者:行者123 更新时间:2023-12-04 20:07:22 27 4
gpt4 key购买 nike

我正在开发一个 JPA 应用程序(使用 hibernate ),我正在与 作斗争。自动冲洗 特征。

默认情况下,每当我们处理对任何实体的查询时,完整的 实体管理器 被冲洗。在大多数情况下这是可以的:我们希望 JPA 处理针对最新数据库的查询。

然而,碰巧我们也存储了一些 功能参数在我们的数据库中。
这与我们的核心业务模型完全分离,我们不希望选择我们刷新 EM 的参数:参数获取可能在过程中发生得相当深,当我们知道时,我们会失去对刷新 EM 的控制;好吧。

实际上,这会导致一些 DB 约束异常:数据模型尚未一致(在进程中间),并且选择参数会强制刷新此数据模型。

我正在考虑添加第二个 实体管理器 ,只是参数,但我觉得它有点矫枉过正。

能不能更容易解决?与 隔离级别 在参数 DAO 上,以便在单独的事务中处理参数?

最佳答案

这可以通过 JTA 事务解决,但您需要一个 JTA 事务管理器。如果您在 Java EE 应用程序服务器中运行,那么您已经拥有 JTA 支持。如果您运行基于 Spring 的应用程序,您需要包含一个独立的 TM,例如 Bitronix .

然后 JTA 允许您在单个全局事务中为同一个数据库(但具有来自同一线程的多个数据源)登记多个连接。因此,您的实体管理器将登记一个连接,然后您可以从您的 XA 连接池(由您的 JTA 事务管理器提供,如 Bitronix)中打开一个新连接并保存 功能参数 .

这两个登记的连接将被隔离,因此在提交事务之前,第二个连接中的更改将不可用。

如果不需要通过 JPA 保存功能参数,那么使用 Spring JDBC 来完成这个任务会更容易。否则,您需要两个实体管理器,这将使您的设置更加复杂。

关于hibernate - 选择给定数据时防止刷新 EntityManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23829749/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com