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

时间:2011-01-19 14:21:33

标签: java hibernate spring jpa

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

persistence.xml 还需要吗?

感谢。

3 个答案:

答案 0 :(得分:42)

更新: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初始化策略冲突。

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

因此,实际上您可以通过编写自定义persistence.xml在没有PersistenceUnitManager的情况下在Spring中配置JPA,但这样的管理器不是开箱即用的。

答案 1 :(得分:6)

当您通过JPA使用Hibernate时,需要

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

答案 2 :(得分:1)

JPA规范没有说明文件是否需要的任何地方,但在EntityManagerFactory和EntityManager的合同的定义中,实际上在整个规范中,反复提到了persistence.xml文件。

我最近不得不处理这样一个问题:是否可以在不使用persistence.xml的情况下使用Hibernate 3.6以编程方式配置JPA 2.0。

我断定这是不可能的,尽管您可以将文件配置为包含非常小的配置。我确定该文件必须至少包含持久性单元的名称。其余信息可以编程方式提供给实体管理器工厂作为参数。

我从未使用过弹簧,因此我不知道它是否使用任何技巧来解决这个问题。