使用Spring和Hibernate时是否需要persistence.xml?

use*_*201 26 java spring hibernate jpa

我正在使用Spring JPA和Hibernate的项目.persistence.xml中的大多数内容都可以在Spring applicationContext.xml文件中指定.

那么persistence.xml还需要吗?

谢谢.

axt*_*avt 42

更新: Spring 3.1将支持persistence.xml-free JPA配置,请参阅Spring 3.1 M2:配置增强功能.


darioo的答案有利于实际应用,但在技术上并不正确.

PersistenceProvider 有两种工厂方法:

  • EntityManagerFactory createEntityManagerFactory(String emName, Map map)- 对于独立环境,persistence.xml将由持久性提供程序进行解析.

  • EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map)- 对于应用程序服务器环境,persistence.xml由应用程序服务器解析,其内容作为传递PersistenceUnitInfo.

Spring's LocalContainerEntityManagerFactoryBean模拟应用程序服务器环境.因此,它解析persistence.xml自身,将其内容与应用程序上下文中的值合并,并使用第二个工厂方法将其传递给持久性提供程序.

但是,获取persistence.xml数据的过程是可配置的:

  • 您可以persistence.xml使用persistenceXmlLocation属性配置文件名- 这有助于避免与应用程序服务器的默认JPA初始化策略冲突.

  • 您可以PersistenceUnitInfo通过设置自定义PersistenceUnitManager策略来完全覆盖源.

所以,实际上你可以在Spring中配置JPA而不需要persistence.xml编写自定义PersistenceUnitManager,尽管这样的管理器不是开箱即用的.


dar*_*ioo 6

persistence.xml当您通过JPA使用Hibernate时需要,即使您使用的是Spring JPA.如果您直接使用Hibernate,则persistence.xml不需要.