我正在使用Spring JPA和Hibernate的项目。 中的大部分东西persistence.xml可以在Spring applicationContext.xml文件中指定。使用Spring和Hibernate时需要persistence.xml吗?
那么是persistence.xml需要了吗?
谢谢。
我正在使用Spring JPA和Hibernate的项目。 中的大部分东西persistence.xml可以在Spring applicationContext.xml文件中指定。使用Spring和Hibernate时需要persistence.xml吗?
那么是persistence.xml需要了吗?
谢谢。
更新: Spring 3.1将支持persistence.xml
-JPA配置,请参阅Spring 3.1 M2: Configuration Enhancements。
darioo的回答是不错的实际应用,而不是技术问题。
PersistenceProvider
有两个工厂方法:
EntityManagerFactory createEntityManagerFactory(String emName, Map map)
- 对于独立环境,persistence.xml
是通过持久性提供解析。
EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map)
- 对于应用程序服务器环境,persistence.xml
由应用程序服务器解析,其内容作为PersistenceUnitInfo
传递。
Spring的LocalContainerEntityManagerFactoryBean
模拟应用程序服务器环境。因此它自己分析persistence.xml
,将其内容与应用程序上下文中的值合并,并使用第二种工厂方法将其传递给持久性提供程序。
然而,获得persistence.xml
数据的过程是可配置的:
您可以配置persistence.xml
文件中使用persistenceXmlLocation
属性的名称 - 为了避免与应用程序服务器的默认JPA初始化策略冲突,它是有用的。
通过设置自定义PersistenceUnitManager
策略,您可以完全覆盖PersistenceUnitInfo
的来源。
所以,其实你可以在Spring中通过编写自定义PersistenceUnitManager
配置JPA没有persistence.xml
,虽然这样的管理者不可开箱。
persistence.xml
在通过JPA使用Hibernate时需要,即使您使用的是Spring JPA。如果您直接使用Hibernate,则不需要persistence.xml
。
为什么春天JPA与Hibernate作为JPA提供商需要persistence.xml文件? – Suvasis 2014-09-18 11:19:05
JPA规范没有描述任何需要该文件的地方,但是在EntityManagerFactory和EntityManager的约定的定义中以及实际上在整个规范中,persistence.xml文件被一遍又一遍地提及。
我最近不得不处理是否有可能在没有使用persistence.xml的情况下以编程方式配置JPA 2.0与Hibernate 3.6的问题。
我的结论是,这是不可能的,但你可以配置文件包含了非常最低配置。我确定该文件必须至少包含持久性单元的名称。剩下的信息可以编程方式提供给实体管理器工厂作为参数。
我从来没有使用弹簧,虽然,所以我不知道它是否使用任何技巧来解决这个问题。
一个很好的答案,我会投你了,如果我没有用完所有的票为这一天。我认为OP不会在Spring内部进行挖掘,因为它似乎没有必要,也有点复杂。 – darioo 2011-01-19 14:52:22