1、persistence-unit标签是persistence.xml文件中最主要的标签,它用于定义一个应用程序的持久性单元,可以看作是一个应用程序的实体模型的抽象。
2、 persistence-unit标签在xml配置文件中以 ... ,在源代码中以@PersistenceUnit声明格式存在。
3、persistence-unit标签包含以下属性,每个属性由属性名和值组成:
(1)name属性:定义此持久化单元的名称,便于程序代码根据此名称调用对应的持久化单元;
(2)transaction-type属性:定义事务类型,有RESOURCE_LOCAL和JTA两种可供选择;
(3)jta-data-source属性:定义由JTA管理的数据源的名字,此属性只有在transaction-type属性设置为JTA时才有效;
(4)non-jta-data-source属性:定义由非JTA管理的数据源的名字,此属性只有在transaction-type属性设置为RESOURCE_LOCAL时才有效;
(5)provider属性:定义持久化单元的提供者,即JPA实现框架,例如Hibernate;
(6)exclude-unlisted-classes属性:定义是否排除未列出的类,如果设置为true,在persitence-unit中没有明确的定义的类将不会与持久性单元关联,若设置为false,则在persistence-unit中没有明确定义的类将自动关联到持久性单元;
(7)mapping-file属性:定义XML的映射文件的位置,由其中的配置信息来配置持久化实体;
(8)jar-file属性:定义持久化实体所在的jar文件的位置;
(9)class属性:定义持久化实体的 class 的名称;
(10)shared-cache-mode属性:定义缓存模式,常见的有:NONE、ALL、ENABLE_SELECTIVE、DISABLE_SELECTIVE、UNSPECIFIED。
4、persistence-unit标签的内部也可以包含其他的一些内容,如:
(1)properties标签:定义很多持久化属性,如持久化类型,数据库用户名密码,数据库连接URL等;
(2)mapping-file标签:定义xml格式的映射文件;
(3)jar-file标签:定义持久化实体所在的jar文件;
(4)class标签:定义持久化实体的class名;
(5)exclude-unlisted-classes标签:定义是否排除未列出的类;
(6)validation-mode标签:定义validator是激活验证模式,常见的两种有:NONE和AUTO。
5、总结:persistence-unit 标签是 persistence.xml 中最重要的标签,主要用于定义应用程序持久性单元,包含name、 transaction-type、jta-data-source、 non-jta-data-source、provider、exclude-unlisted-classes、mapping-file、jar-file、class、shared-cache-mode等属性,且也可添加properties、mapping-file、jar-file、class、exclude-unlisted-classes、validation-mode等内部标签。
(1)Persistence XML与JPA之间的关系:
Persistence XML文件是一种标准的XML文件格式,用于配置 JPA 的实现的属性。它的主要目的是指定 JPA 实体管理器所使用的数据源,以及如何访问该数据源(比如连接 URL,用户名和密码),还有如何映射实体类到数据库表等。
(2)JPA(Java Persistence API)是一种进行 Java 持久性操作的 API,它可以用来将 Java 对象保存到一个以上的持久层中,从而使得 Java 开发人员可以在数据库中执行 CRUD(创建、读取、更新和删除)操作。它也可以用来指定如何将 Java 对象映射到数据库表中,以及如何从表中检索对象。
(3)由于JPA API可以简化开发者要处理的任务 ,因此它允许为开发过程中提供持久层抽象,另一方面,Persistence XML文件是一个十分重要的配置 JPA 的工具。存在一种互动关系,即JPA API可以基于Persistence XML文件中的配置信息进行操作,而Persistence XML文件和实体类也可以正确创建出JPA API可以使用的对象。
(4)总之,JPA 和 Persistence XML之间存在着紧密的关系,后者是实现前者所必备的条件。JPA使用Persistence XML文件中的属性值初始化JPA实体管理器,这样框架才能在执行诸如访问数据库,处理实体信息等操作中使用 正确的参数。而将实体类配置为映射到数据库表的工作也要在Persistence XML中进行定义,从而使JPA能够正确的找到和处理实体实例。