介绍

在本文中,我将解释 JPA persistence.xml配置文件的用途,以及如何使用可用的 XML 标记或属性设置 Java Persistence 应用程序。

虽然 Spring 应用程序可以在不需要 XML JPA 配置文件的情况下进行引导,但理解每个配置选项的含义仍然很重要,因为 Spring 在构建 Java PersistenceLocalContainerEntityManagerFactoryBean或 Hibernate-specific时还提供了另一种方法LocalSessionFactoryBean

持久性单元

persistence.xml配置文件用于配置给定的 JPA 持久性单元。Persistence Unit 定义了引导所需的所有元数据EntityManagerFactory,例如实体映射、数据源和事务设置,以及 JPA 提供程序配置属性。

的目标EntityManagerFactory是用于创建EntityManager我们可以用于实体状态转换的对象。

因此,persistence.xml配置文件定义了引导 JPA 所需的所有元数据EntityManagerFactory

JPA 持久性 XML 文件位置

传统上,persistence.xml它位于META-INF需要驻留在 Java 类路径根目录中的文件夹中。如果您使用的是 Maven,则可以将其存储在resources文件夹中,如下所示:

src/main/resources/META-INF/persistence.xml

JPA 持久性 XML 文件结构

配置persistence.xml文件结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
     xmlns="http://xmlns.jcp.org/xml/ns/persistence"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
     http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
 
    <persistence-unit
        name="HypersistenceOptimizer"
        transaction-type="JTA">
 
        <description>
            Hypersistence Optimizer is a dynamic analyzing tool that can scan
            your JPA and Hibernate application and provide you tips about the
            changes you need to make to entity mappings, configurations, queries,
            and Persistence Context actions to speed up your data access layer.
        </description>
 
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
 
        <jta-data-source>java:global/jdbc/default</jta-data-source>
 
        <properties>          
            <property
                name="hibernate.transaction.jta.platform"
                value="SunOne"
            />
        </properties>
    </persistence-unit>
</persistence>

标签是根persistenceXML 元素,它定义了 JPA 版本和用于验证persistence.xml配置文件的 XML 模式。

持久性单元

该元素定义了关联的 JPA 持久性单元的名称,稍后您可以在使用JPA 注释注入关联的实例persistence-unit时使用它来引用它:@PersistenceUnitEntityManagerFactory

1
2
@PersistenceUnit(name = "HypersistenceOptimizer")
private EntityManagerFactory entityManagerFactory;

transaction-type属性定义了 JPA 事务策略,它可以采用以下两个值之一:

  • JTA
  • RESOURCE_LOCAL

传统上,Java EE 应用程序默认使用 JTA,这需要一个使用 2PC(两阶段提交)协议的 JTA 事务管理器以原子方式将更改应用于多个数据源(例如,数据库系统、JMS 队列、缓存)。

如果要将更改传播到单个数据源,则不需要 JTA,因此RESOURCE_LOCAL事务类型是一种更有效的替代方案。例如,默认情况下,Spring 应用程序使用RESOURCE_LOCAL事务,并且要使用JTA,您需要显式选择JtaTransactionManagerSpring bean。

描述

description元素允许您提供有关当前持久性单元目标的更多详细信息。

提供者

XML 元素定义了实现 JPA接口的provider全限定类名。PersistenceProvider

如果您使用的是 Hibernate 4.3 或更新版本,则需要使用org.hibernate.jpa.HibernatePersistenceProvider类名。

如果您使用的是 Hibernate 4.2 或更早版本,则需要使用org.hibernate.ejb.HibernatePersistence类名。

jta 数据源和非 jta 数据源

JPA 规范定义两个不同的 XML 标记来提供 JNDIDataSource名称是非常不寻常的。应该有一个data-source属性,因为transaction-type已经指定是否使用 JTA。

不,如果您使用的是 JTA,您可以使用jta-data-source为关联的 JTA 指定 JNDI 名称DataSource,而对于RESOURCE_LOCAL,您需要使用non-jta-data-source.

如果您使用的是 Hibernate,您还可以使用hibernate.connection.datasource配置属性来指定DataSource要使用的 JDBC。

特性

properties元素允许您定义要配置的 JPA 或 JPA 提供程序特定的属性:

  • 冬眠者Dialect
  • JTA 交易平台(例如 GlassFish、JBoss、Bitronix、Atomikos)
  • 是否应该自动生成数据库模式
  • Hibernate 是否应该跳过对 RESOURCE_LOCAL 事务的自动提交检查
  • 激活慢SQL查询日志
  • org.hibernate.cfg.AvailableSettings以及您可以在界面中找到的更多属性。

实体映射设置

默认情况下,Hibernate 能够根据@Entity注解的存在来查找 JPA 实体类,因此您无需声明实体类。

排除未列出的类

但是,如果要显式设置要使用的实体类,并排除在当前 Java 类路径中找到的任何其他实体类,则需要将exclude-unlisted-classes元素设置为以下值true

1
<exclude-unlisted-classes>true</exclude-unlisted-classes>

班级

设置好exclude-unlisted-classes上面的 XML 元素后,需要通过 XML 元素指定当前 Persistence Unit 注册的实体类列表class

1
2
3
4
<class>io.hypersistence.optimizer.forum.domain.Post</class>
<class>io.hypersistence.optimizer.forum.domain.PostComment</class>
<class>io.hypersistence.optimizer.forum.domain.PostDetails</class>
<class>io.hypersistence.optimizer.forum.domain.Tag</class>

绝大多数 JPA 和 Hibernate 应用程序使用注释来构建对象关系映射元数据。但是,即使您正在使用注解,您仍然可以使用 XML 映射将静态注解元数据覆盖为通过orm.xml配置文件提供的元数据。

例如,您可以在默认情况下使用注解使用SEQUENCE标识符生成器@SequenceGenerator,​​并将其替换IDENTITY为 MySQL,它不支持数据库序列。

有关此主题的更多详细信息,请查看这篇文章。

映射文件

默认情况下,orm.xml配置文件位于META-INF文件夹中。如果要使用不同的文件位置,可以使用文件mapping-file中的 XML 元素persistence.xml,如下所示:

1
<mapping-file>file:///D:/Vlad/Work/Examples/mappings/orm.xml</mapping-file>

有关使用外部orm.xml文件以 XML 格式提供 JPA 映射的更多详细信息,请查看这篇文章。

jar 文件

但默认情况下,JPA 提供程序将扫描当前 Java 类路径以加载实体类或 XML 映射。如果要提供一个或多个要扫描的 JAR 文件,可以使用该jar-file元素,如下所示:

1
<jar-file>lib/hypersistence-optimizer-glassfish-hibernate-example.jar</jar-file>

共享缓存模式

shared-cache-mode元素允许您定义在SharedCacheMode二级缓存中存储实体的策略,它可以采用以下值之一:

  • ALL– 将所有实体存储在二级缓存中,
  • NONE– 实体不存储在二级缓存中,
  • ENABLE_SELECTIVE– 默认情况下不缓存任何实体,除了@Cacheable(true)标注注释的实体,这些实体将被缓存
  • DISABLE_SELECTIVE- 默认情况下所有实体都被缓存,除了带有@Cacheable(false)注释的实体
  • UNSPECIFIED– 使用 JPA 提供程序默认缓存策略。shared-cache-mode这也是未设置元素时使用的默认值。

您还可以使用该属性以shared-cache-mode编程方式覆盖策略,如下所示:javax.persistence.cache.storeMode

1
2
3
4
5
6
7
8
EntityManagerFactory entityManagerFactory = Persistence
.createEntityManagerFactory(
    "HypersistenceOptimizer",
    Collections.singletonMap(
        "javax.persistence.cache.storeMode",
        SharedCacheMode.ENABLE_SELECTIVE
    )
);

验证模式

validation-modeXML 元素指定策略,该ValidationMode策略指示 JPA 提供者是否应在运行时检查实体 Bean Validation。

validation-mode元素可以采用以下值:

  • AUTO– 如果在当前 Java 类路径中找到 Bean Validation 提供程序,它将自动注册,并且所有实体都将被验证。如果未找到 Bean Validation 提供程序,则不会验证实体。这是默认值。
  • CALLBACK– 实体必须始终由 Bean Validation 提供者进行验证。如果 JPA 提供者没有在类路径上找到 Bean Validation 实现,则引导过程将失败。
  • NONE– 即使在类路径中找到 Bean Validation 提供程序,也不会验证实体。

您还可以使用该属性以validation-mode编程方式覆盖策略,如下所示:javax.persistence.validation.mode

1
2
3
4
5
6
7
8
EntityManagerFactory entityManagerFactory = Persistence
.createEntityManagerFactory(
    "HypersistenceOptimizer",
    Collections.singletonMap(
        "javax.persistence.validation.mode",
        ValidationMode.CALLBACK
    )
);

结论

Java Persistence XML 配置文件允许您定义一个 Persistence Unit 配置,稍后您可以使用 Java EE 或 Spring 进行引导。

了解所有persistence.xml文件配置选项非常重要,因为它可以让您解决各种各样的映射要求。

JPA persistence.xml 文件初学者指南相关推荐

  1. 不在JPA 的 persistence.xml 文件里配置Entity class的解决的方法

     在Spring 集成 Hibernate 的JPA方式中,须要在persistence配置文件里定义每个实体类.这样很地不方便.2种方法能够解决此问题: 这2种方式都能够实现不用在persist ...

  2. JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法

    原文地址:http://www.cnblogs.com/taven/p/3351841.html JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法 在Spr ...

  3. JPA persistence.xml SQL脚本定义

    您可以在将在运行时执行的JPA持久性上下文定义中定义并链接到SQL脚本. 有标准化的属性来定义脚本,以分别说明如何创建模式,批量加载数据和删除模式: <persistence version=& ...

  4. JPA /休眠刷新策略初学者指南

    介绍 在我之前的文章中,我介绍了实体状态转换 对象关系映射范例. 当刷新当前持久性上下文时,所有管理实体状态转换都将转换为关联的数据库语句. Hibernate的刷新行为并不总是像人们想象的那么明显. ...

  5. spring集成jpa【为什么有 persistant.xml 文件呢?】

    原文地址: http://www.cnblogs.com/javahuang/archive/2012/12/19/2824633.html spring集成JPA的其中一种方式 JPA和hibern ...

  6. java persistence.xml_java – 找不到persistence.xml

    我尝试使用jpa与spring-orm和hibernate. 我有带有TRADES表的mysql数据库.我尝试使用jpa使用此表. 我尝试使用persistence.xml测试EntityManage ...

  7. JavaEE----JPA中配置文件persistence.xml

    1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <persistence version=" ...

  8. jpa执行sql脚本_JPA persistence.xml SQL脚本定义

    jpa执行sql脚本 您可以在将在运行时执行的JPA持久性上下文定义中定义并链接到SQL脚本. 有标准化的属性来定义脚本,以分别说明如何创建模式,批量加载数据和删除模式: <persistenc ...

  9. JPA介绍及persistence.xml配置介绍

    JPA 全称是:Java Persistence API 是由EJB 3.0软件专家组开发,其宗旨是为POJO提供持久化标准规范,了解JPA 从 persistence.xml 开始.它的作用是用来配 ...

最新文章

  1. sql text转image_[转]故障分析 | 记一次 MySQL 主从双写导致的数据丢失问题
  2. P2955 [USACO09OCT]奇数偶数Even? Odd?
  3. jquery选中checkbox
  4. jQuery 多个 classes 选择器
  5. 035_Breadcrumb面包屑
  6. 如何安装mysql5.7.9_安装mysql-5.7.9-winx64
  7. C语言将任意的正整数按反序输出
  8. Activiti 7.1.4 发布,业务流程管理与工作流系统
  9. 8口网管型工业以太网交换机产品性能介绍
  10. 江苏大学矩阵论、数理统计期末考试复习
  11. 【渝粤教育】电大中专消费者心理学作业 题库
  12. C++ coredump原因总结(转载)
  13. mysql中不重复_mysql中distinct的用法(不重复记录)
  14. Spring整合MyBatis为什么导致MyBatis一级缓存失效
  15. 光学遥感和微波遥感异同点?影响微波散射的因素有哪些?
  16. 创业十年的感悟,创业者首先要让自己活下去
  17. Lotus notes问题与处理
  18. php怎么规范图片大小,如何在PHP中调整图片大小?
  19. vue 图片放大、缩小、旋转、滚轮操作图片放大缩小
  20. Drf从入门到精通一(API接口、Postman、Restful规范、序列化、快速使用drf、CBV源码分析)

热门文章

  1. 【计算机毕业设计】基于微信小程序的大学生心理测评系统
  2. Vscode 调试TS
  3. 机器视觉从工业物联网 (IIoT) 中获取强大的洞察力
  4. 揭秘手机预装乱象:隐身屏幕内的“食费”利益链
  5. 计算机网络强化学习笔记
  6. HarmonyOS鸿蒙学习笔记(11)Flex组件alignItems属性说明
  7. qeePHP学习 qeePHP基本设置
  8. 采样坦克4终极音色库-IK Multimedia SampleTank v4.08 MAX | 175G
  9. Consul启动报错Unknown extra arguments
  10. 怎样认识比你优秀的人并和他们成为朋友呢?