当前位置: 首页 > 面试题库 >

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

娄振
2023-03-14
问题内容

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

那么是否还需要 persistence.xml

谢谢。


问题答案:

更新: Spring 3.1将支持persistence.xml免费的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
LocalContainerEntityManagerFactoryBean模拟应用服务器环境。因此,它解析persistence.xml自身,将其内容与应用程序上下文中的值合并,然后使用第二个工厂方法将其传递给持久性提供程序。

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

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

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

因此,实际上您可以在Spring中配置JPA,而无需persistence.xml编写定制程序PersistenceUnitManager,尽管这种管理器不是开箱即用的。



 类似资料:
  • 问题内容: 好吧,我正在尝试使用JPA + Hibernate + Spring首次配置C3P0。在persistence.xml中,我有: 但是,当我尝试初始化tomcat时,出现以下错误: 编辑1: 这是我的applicationContext.xml,如何在其中配置C3P0呢? 问题答案: 您的配置有缺陷。您正在应用程序上下文中进行配置。因此,基本上所有属性都是无用的,其次,该属性的设置破坏

  • 问题内容: 我正在尝试设置一个Spring JPA Hibernate简单示例WAR,以将其部署到Glassfish。我看到一些示例使用persistence.xml文件,而其他示例则没有。有些示例使用数据源,有些则不使用。到目前为止,我的理解是,如果我拥有以下内容,则不需要dataSource: 我可以很好地部署,但是Spring不会注入我的EntityManager。 我的applicatio

  • 问题内容: 我有一个非常简单的persistance.xml文件: 而且有效。 但是,当我删除元素时,应用程序看不到实体(所有类都带有注释)。 是否有自动扫描类的机制? 问题答案: 您可以使用persistence.xml 。从Java EE 5教程中 : 该文件定义了一个名为的持久性单元,它使用JTA感知数据源。所述和元素指定管持久类:实体类,可嵌入类和超类映射。该元素指定JAR文件都包含持久化

  • 目的是执行本机查询并将结果映射到bean类。我能够用实体测试我的应用程序。JPA能够根据实际的数据库表验证它们的映射。 为什么使用本机查询而不编写完整的实体->查询涉及多个联接。不需要将查询中涉及的所有表作为实体包含。 与jpa相关的应用程序上下文xml的一部分如下所示 当我试图执行查询时,我得到了下面的异常 原因:org.hibernate.mappingexception:未知实体:com.a

  • 我需要实现Spring的@Transactional注释,但我无法实现。 在过去的三个星期里,我尝试了很多方法,但没有一个奏效。 我还需要使用EntityManager。为了测试Spring是否有效,我尝试使用@PersistenceContext注入EntityManager(我还尝试使用@PersistenceUnit和/或与EntityManager Factory一起),但我总是得到nul

  • 问题内容: 我有一个非常简单的文件: 而且有效。 但是,当我删除元素时,应用程序看不到实体(所有类都带有注释)。 是否有自动扫描类的机制? 问题答案: 你可以使用 该文件定义了一个名为的持久性单元,它使用JTA感知数据源。所述和元素指定管持久类:实体类,可嵌入类和超类映射。该元素指定JAR文件都包含持久化类管理的打包持久单元可见,而该class元素明确命名持久化类管理。 对于,也可以进行设置和配置