LocalContainerEntityManagerFactoryBean和LocalEntityManagerFactoryBean有什么区别?

Blu*_*Sky 39 spring hibernate jpa entitymanager spring-orm

任何人都可以解释Spring Framework的LocalContainerEntityManagerFactoryBeanLocalEntityManagerFactoryBean之间的区别是什么?

Pra*_*nth 37

基本上,JPA规范定义了两种类型的实体管理器.它们是:

i)应用程序管理:应用程序管理实体管理器意味着"实体管理器仅由应用程序(即我们的代码)创建和管理".

ii)容器管理:容器管理实体管理器意味着"实体管理器仅由J2EE容器创建和管理(即我们的代码不直接管理,而是实体管理器由容器创建和管理,我们的代码通过某种方式获取EM使用JNDI).

注意:Created和Managed(上图)表示"在交易中打开,关闭和涉及实体经理"

LocalContainerEntityManagerFactoryBean - 容器管理的
LocalEntityManagerFactoryBean - 应用程序管理

重要提示:对于基于弹簧的应用,差异并不大.Spring只扮演角色(如果配置 LocalContainerEntityManagerFactoryBean则作为容器,如果配置 LocalEntityManagerFactoryBean则作为应用程序)


nic*_*ild 16

文档说明了一切:

LocalContainerEntityManagerFactoryBean - 来自链接:FactoryBean,它根据JPA的标准容器引导程序契约创建JPA EntityManagerFactory .

LocalEntityManagerFactoryBean - 来自链接:FactoryBean,它根据JPA的标准独立引导程序契约创建JPA EntityManagerFactory .

基本上,唯一的区别在于他们如何创建JPA EntityManagerFactory.

  • 我仍然在容器和独立之间混淆.我能读的任何参考? (3认同)

Bas*_*hdy 16

LocalEntityManagerFactoryBean负责

是最简单和最有限的.您不能引用现有的JDBC DataSource bean定义,也不存在对全局事务的支持.

LocalContainerEntityManagerFactoryBean

是最强大的JPA设置选项,允许在应用程序内进行灵活的本地配置.它支持指向现有JDBC DataSource的链接,支持本地和全局事务

REF:spring-framework-reference.pdf"Spring 3"


小智 10

LocalEntityManagerFactoryBean生成应用程序管理的EntityManagerFactory.

LocalContainerEntityManagerFactoryBean生成容器管理的EntityManagerFactory.

参考:春天的行动 - 克雷格沃尔斯


PAA*_*PAA 5

JPA规范定义了两种实体管理器:

  • 应用程序管理的 -Entity管理器是在应用程序直接从实体管理器工厂请求管理器时创建的.对于应用程序管理的实体管理器,应用程序负责打开或关闭实体管理器并让实体管理器参与事务.这种类型的实体管理器最适合在不在Java EE容器中运行的独立应用程序中使用.

  • 容器管理的 -Entity管理器由Java EE容器创建和管理.应用程序根本不与实体管理器工厂交互.相反,实体经理直接通过注入或从JNDI获得.容器负责配置实体管理器工厂.这种类型的实体管理器最适合Java EE容器使用,该容器希望保持对JPA配置的某些控制,超出persistence.xml中指定的范围.

应用程序管理 EntityManagersEntityManagerFactory通过调用createEntityManagerFactory()PersistenceProvider 的方法获得的.同时,容器管理的 EntityManagerFactorys是通过PersistenceProvider的createContainerEntityManagerfactory()方法获得的 .

实体管理器工厂的每个风格都由相应的Spring工厂bean生成:

  • LocalEntityManagerFactoryBean 生成应用程序管理的Entity-ManagerFactory.

  • LocalContainerEntityManagerFactoryBean 生成容器管理的EntityManagerFactory

重要的是要指出,在应用程序管理EntityManagerFactory和容器管理之间做出的选择 EntityManagerFactory对于基于Spring的应用程序是完全透明的.当您使用Spring和JPA时,处理任何形式的复杂细节EntityManagerFactory都是隐藏的,使您的数据访问代码专注于其真正的目的:数据访问.

就Spring而言,应用程序管理容器管理的实体管理器工厂之间唯一真正的区别在于它们是如何在Spring应用程序上下文中配置的.