5

我很难理解容器管理的实体管理器和应用程序管理的实体管理器之间的区别?

如果您能给我一个说明差异的例子,我将不胜感激。

4

2 回答 2

9

对于容器管理的实体管理器,容器管理该实体管理器的生命周期。对于应用程序管理的应用程序(意味着您,程序员)管理它。

一个简单但非常明显的区别是您必须调用close()应用程序管理的实体工厂。当您使用容器管理的容器时,容器会为您执行此操作。

应用程序管理的实体管理器的持久性上下文也不是事务范围的。它在实体管理器创建时开始,在它关闭时结束。这使它有点像扩展的持久性上下文,不同之处在于您可以在任何地方使用这种类型的实体管理器,而不仅仅是在有状态的 bean 中。

最后,应用程序管理的实体管理器是唯一可以正式配置为使用资源本地事务的实体管理器,这些事务独立于容器可能运行的任何(JTA)事务。

请注意,在 Java SE 中,您只有应用程序管理的实体管理器。因此,当您只是将 Hibernate 添加到 Tomcat(一种流行的组合)时,您实际上一直在使用应用程序管理的实体管理器。

于 2012-11-21T10:25:26.283 回答
0

如果您有多个 java EE 应用程序连接同一个数据库并使用 JPA 实体管理器缓存。你可能会遇到这个问题:

在一个应用程序中进行的数据库更改可能不会立即反映在其他应用程序中

使用应用程序托管实体管理器代替容器托管实体管理器是解决此问题的完美解决方案。

你可以参考我的博客Java EE Example - How to use application managed entitymanager

于 2016-01-22T01:34:48.037 回答