使用没有事务不一致JPA行为,传播支持并OpenEntityManager图案(Inconsiste

2019-09-30 08:09发布

我们使用JPA(休眠4)春季4管理JTA事务。 为了让即使只是从没有任何交易数据库读取延迟初始化,我们添加了“OpenEntityManager”的格局。

你可以找到一个测试用例GitHub上的这些问题https://github.com/abenneke/sandbox/tree/master/spring-hibernate4-transaction

我们知道,有没有交易同步之间的差异在所有和支持同步。 但JPA行为似乎是不一致的莫名其妙:

  • 如果没有交易同步活跃,我们得到了一个TransactionRequiredException来自泉城SharedEntityManagerCreator试图坚持使用JPA东西的时候。
  • 如果只有一个支持事务的同步活跃,我们没有得到这个异常,坚持请求忽略。 然而,这正是为了避免在这种情况SharedEntityManagerCreator产生上述异常时。
  • 如果有一个“OpenEntityManager”模式积极的,没有例外,也与持续的请求将被自动忽略为好。

在我看来,有这些情况,我希望看到这个例外在所有情况下或无之间没有真正的区别?

谢谢!

更新2015年7月:我现在提出这个作为一个问题来春https://jira.spring.io/browse/SPR-13243

Answer 1:

看到:

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate3/support/OpenSessionInViewFilter.html

方法(OpenEntityManagerInViewFilter应工作方式相同)

注意:此过滤器将默认情况下不刷新Hibernate的Session,设置为FlushMode.NEVER刷新模式。 它假定与照顾冲洗服务层交易组合使用:将活动事务管理器将暂时读写事务期间刷新模式改变为FlushMode.AUTO,该洗净模式复位FlushMode.NEVER末每次交易。 如果你打算使用此过滤器没有交易,考虑更改默认的刷新模式(通过“flushMode”属性)。

因此,与OEMIV并没有交易,没有冲洗等,没有TransactionRequiredException。



文章来源: Inconsistent JPA behavior using no transaction, propagation SUPPORTS and OpenEntityManager pattern