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

Rap*_*vet 5 hibernate jpa transactions flush entitymanager

我正在开发一个JPA应用程序(使用hibernate),我正在使用AutoFlush功能.

默认情况下,每当我们处理任何实体的查询时,都会刷新完整的EntityManager.在大多数情况下这是可以的:我们希望JPA处理针对最新数据库的查询.

但是,我们还在DB中存储了一些功能参数.这与我们的核心业务模型完全分离,我们不希望选择我们刷新EM的参数:参数的获取可能在过程中发生得非常深,当我们知道它时我们就失去了冲洗EM的控制;好的.

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

我正在考虑添加第二个entityManager,只是参数,但我发现它有点矫枉过正.

可以更轻松地解决吗?使用参数DAO上的隔离级别,以便在单独的事务中处理参数?

And*_*i I 1

一、如果使用JTA:

  1. 尝试在 中使用新事务ParametersDAO。这样,外部服务中的托管实体将不会在内部 DAO 中进行管理(恕我直言!)。缺点是,当您ParametersDAO返回时,事务将提交(如果不需要,您可以使用 Statefull EJB,但这对我来说似乎有点过头了)。
  2. 否则,拥有第二个 EntityManager 对我来说似乎并不算大材小用。

二. 如果您使用RESOURCE-LOCAL:

如果您处于应用程序管理环境 ( transaction-type="RESOURCE_LOCAL"),只需EntityManagerEntityManagerFactory( 与拥有第二个EntityManager) 获取另一个即可。