我有一个问题需要理解容器管理和应用程序管理的实体管理器之间的区别吗?
如果你能给我一个说明差异的例子,我将非常感激。
答案 0 :(得分:7)
对于容器管理的实体管理器,容器管理此实体管理器的生命周期。对于应用程序管理的应用程序(意味着您,程序员)管理它。
一个简单但非常明显的区别是您必须在应用程序管理的实体工厂上调用close()
。当您使用容器管理的容器时,容器会为您执行此操作。
应用程序管理的实体管理器的持久性上下文也不是事务范围。它在创建实体管理器时启动,在关闭时结束。这使得它有点像扩展的持久化上下文,不同之处在于您可以在任何地方使用这种类型的实体管理器,而不仅仅是在有状态bean中。
最后,应用程序管理的实体管理器是唯一可以正式配置为使用资源本地事务的管理器,这些事务独立于容器可能运行的任何(JTA)事务。
请注意,在Java SE中,您只有应用程序管理的实体管理器。因此,当您只是将Hibernate添加到Tomcat(一种流行的组合)时,您基本上就是在使用应用程序管理的实体管理器。
答案 1 :(得分:0)
如果您有多个连接相同数据库并使用JPA实体管理器缓存的Java EE应用程序。你可能会遇到这个问题:
在一个应用程序中进行的数据库更改可能不会立即反映在其他应用程序中
使用应用程序管理实体管理器而不是容器管理实体管理器是解决此问题的完美解决方案。
您可以参考我的博客Java EE Example - How to use application managed entitymanager