我正在尝试使用 Hibernate JPA,但我需要创建我的 persistence.xml(这样我才能正确使用实体管理器)。我不确定要创建什么以及将它放在哪里。
这就是我在“核心”模式下配置的 hibernate.cfg.xml 的方式。我正在使用 Eclipse Java EE IDE Web Developers(Indigo 版本):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">XXXXXX</property>
<property name="hibernate.connection.url">jdbc:mysql://<hostname>/<database></property>
<property name="hibernate.connection.username">XXXXX</property>
<property name="hibernate.default_schema">XXXXXX</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
</session-factory>
</hibernate-configuration>
原文由 Valter Silva 发布,翻译遵循 CC BY-SA 4.0 许可协议
JPA 持久性 XML 文件位置
传统上,persistence.xml 位于
META-INF
文件夹中,该文件夹需要驻留在 Java 类路径的根目录中。如果您使用的是 Maven,则可以将其存储在resources
文件夹中,如下所示:JPA 持久性 XML 文件结构
`persistence.xml 配置文件的结构如下:
persistence
标记是根 XML 元素,它定义了 JPA 版本和用于验证persistence.xml
配置文件的 XML 模式。持久单元
persistence-unit
元素定义关联的 JPA 持久性单元的名称,您可以稍后在使用@PersistenceUnit
JPA 注释注入关联的EntityManagerFactory
413 时引用它实例:transaction-type
属性定义了JPA事务策略,它可以取以下两个值之一:JTA
RESOURCE_LOCAL
传统上,Java EE 应用程序默认使用 JTA,这需要有一个使用 2PC(两阶段提交)协议的 JTA 事务管理器,以原子方式将更改应用到多个数据源(例如,数据库系统、JMS 队列、缓存)。
如果您想将更改传播到单个数据源,则不需要 JTA,因此
RESOURCE_LOCAL
事务类型是一个更有效的替代方案。例如,默认情况下,Spring 应用程序使用RESOURCE_LOCAL
事务,而要使用JTA
,您需要明确选择JtaTranscationManager
描述
description
元素允许您提供有关当前持久性单元目标的更多详细信息。供应商
provider
XML 元素定义了实现 JPAPersistenceProvider
接口的完全限定类名。jta 数据源和非 jta 数据源
JPA 规范定义了两个不同的 XML 标记来提供 JNDI
DataSource
名称,这是非常不寻常的。应该有一个data-source
属性,因为transaction-type
已经指定是否使用 JTA。不,如果您使用的是 JTA,则可以使用
jta-data-source
为关联的 JTA 指定 JNDI 名称DataSource
,而对于RESOURCE_LOCAL
你需要使用non-jta-data-source
。特性
properties
元素允许您定义 JPA 或 JPA 提供程序特定的属性以配置:Dialect
org.hibernate.cfg.AvailableSettings
界面中找到更多属性。实体映射设置
默认情况下,Hibernate 能够根据
@Entity
注释的存在来查找 JPA 实体类,因此您无需声明实体类。排除未列出的类
但是,如果要显式设置要使用的实体类,并排除在当前 Java 类路径中找到的任何其他实体类,则需要将
exclude-unlisted-classes
元素的值设置为true
:班级
上面设置了
exclude-unlisted-classes
XML元素后,需要通过class
XML元素指定当前Persistence Unit注册的实体类列表:绝大多数 JPA 和 Hibernate 应用程序使用注释来构建对象关系映射元数据。但是,即使您正在使用注释,您仍然可以使用 XML 映射来覆盖静态注释元数据,该元数据通过
orm.xml
配置文件提供。映射文件
默认情况下,
orm.xml
配置文件位于META-INF
文件夹中。如果要使用不同的文件位置,可以使用mapping-file
persistence.xml
文件中的 XML 元素,如下所示:jar文件
默认情况下,JPA 提供程序将扫描当前的 Java 类路径以加载实体类或 XML 映射。如果要提供一个或多个要扫描的 JAR 文件,可以使用
jar-file
元素,如下所示:共享缓存模式
shared-cache-mode
元素允许您定义SharedCacheMode
二级缓存中存储实体的策略,它可以采用以下值之一:ALL
- 将所有实体存储在二级缓存中,NONE
-实体不存储在二级缓存中,ENABLE_SELECTIVE
- 默认情况下不缓存任何实体,除了标有@Cacheable(true)
注释的实体将被缓存DISABLE_SELECTIVE
- 默认缓存所有实体,标有@Cacheable(false)
注释的实体除外UNSPECIFIED
- 使用 JPA 提供程序默认缓存策略。这也是未设置shared-cache-mode
元素时使用的默认值。您还可以使用
javax.persistence.cache.storeMode
属性以编程方式覆盖shared-cache-mode
策略,如下所示:验证模式
validation-mode
XML 元素指定ValidationMode
策略,它指示 JPA 提供程序是否应在运行时检查实体 Bean 验证。validation-mode
元素可以采用以下值:AUTO
- 如果在当前 Java 类路径中找到 Bean 验证提供程序,它将自动注册,并且将验证所有实体。如果未找到 Bean 验证提供程序,则不会验证实体。这是默认值。CALLBACK
- 实体必须始终由 Bean 验证提供程序进行验证。如果 JPA 提供者在类路径上没有找到 Bean Validation 实现,则引导过程将失败。NONE
- 即使在类路径上找到 Bean 验证提供程序,实体也不会被验证。您还可以使用
javax.persistence.validation.mode
属性以编程方式覆盖validation-mode
策略,如下所示: