您的位置:首页 > 其它

Hibernate学习--JPA配置文件persistence.xml解析

2016-12-16 15:39 706 查看

前言

JPA和Hibernate的水太深,搞到现在还是不大明白,先拿出来晒晒。日后还会更新。

JPA是什么

JavaEE5.0 的平台的 ORM 标准规范。为应用程序访问持久层提供统一的方式。(用于数据库访问之类的)

JPA 与 Hibernate 的关系

JPA 是规范,Hibernate 是实现,是一个ORM框架,除此之外还有TopLink、JDO等ORM框架。 从功能上来讲,JPA 是 Hibernate 的一个子集。Hibernate 只是 JPA 的一个提供商。类似于JDBC 和 JDBC驱动提供商。(不大懂)

persistence.xml配置文件解析

摘抄自网络。

<?xml version="1.0" encoding="UTF-8"?>

<persistence version="1.0"
xmlns:persistence="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd ">

<!--
Name属性用于定义持久化单元的名字 (name必选,空值也合法);
transaction-type 指定事务类型(可选)
-->
<persistence-unit name="unitName" transaction-type="JTA">

<!-- 描述信息.(可选) -->
<description> </description>

<!-- javax.persistence.PersistenceProvider接口的一个实现类(可选) -->
<provider>   </provider>

<!-- Jta-data-source和 non-jta-data-source用于分别指定持久化提供商使用的JTA和/或non-JTA数据源的全局JNDI名称(可选) -->
<jta-data-source>java:/MySqlDS</jta-data-source>
<non-jta-data-source> </non-jta-data-source>

<!-- 声明orm.xml所在位置.(可选) -->
<mapping-file>product.xml</mapping-file>

<!-- 以包含persistence.xml的jar文件为基准的相对路径,添加额外的jar文件.(可选) -->
<jar-file>../lib/model.jar</jar-file>

<!-- 显式列出实体类,在Java SE 环境中应该显式列出.(可选) -->
<class>com.domain.User</class>
<class>com.domain.Product</class>

<!-- 声明是否扫描jar文件中标注了@Enity类加入到上下文.若不扫描,则如下:(可选) -->
<exclude-unlisted-classes/>

<!--   厂商专有属性(可选)   -->
<properties>
<!-- hibernate.hbm2ddl.auto= create-drop / create / update -->
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
</properties>

</persistence-unit>

</persistence>


配置文件要求

必须配置在 META-INF 目录下,且配置名字是固定的 persistence.xml;

顶级节点为
<persistence>
,次级节点为
<persistence-unit>
,JPA 的绝大部分信息配置在
<persistence>
节点内;

<persistence-unit>
节点 name 属性:用来指定这个  
persistence
单元的名称;

<persistence-unit
> 节点
transaction-type
属性:指定 JPA 的事务处理策略,默认为
RESOURCE_LOCAL
,数据库级别的事务,只能针对一种数据库,不支持分布式事务。 若需要支持分布式事务,使用 JTA,即:
transaction-type="JTA"


如果 JPA 的提供者存在多个的时候,需要在
<provider>
节点配置具体使用哪个提供者。需要是
javax.persistence.spi.PersistenceProvider
的实现类;

<properties>
节点内通过
<property>
节点配置数据库连接信息;

在 节点内通过 节点配置属于具体实现的特性信息;

通过 节点来配置映射的实体类。

相关属性详解

transaction-type(事务管理)

是什么

持久性单元指定事务是如何管理的。事务类型取决于目标容器,如果目标容器是Java EE容器(例如wildfly服务器),你可以使用容器管理或者应用管理。如果不是这样的话,你只能使用应用管理。

容器管理的事务(JTA事务)

容器使用Java Transaction API来管理事务。你必须将你的应用部署在Java EE容器中,并且你的数据源必须支持JTA。在persistence.xml中事务类型被设置为JTA.如果你使用Glassfish这个是默认选项。

应用管理的事务(本地资源事务:Resource-Local Transaction)

由应用负责事务处理。在persistence.xml文件中,被设置为RESOUCE_LOCAL。

jta-data-source

是什么

数据源指的是提供实体存储的数据库。数据源必须在服务器中注册并且使用JNDI名称指定。如果事务是由容器管理的JTA事务那么数据源必须是JTA数据源。如果事务是应用负责管理的,数据源根据在IDE中注册的JDBC数据库连接指定。在Java SE环境下,数据库可以通过数据源指定,也可以使用其他方法,取决于持久性提供者的要求。

如何定义(以wildfly服务器为例)

这个需要在服务器的/bin/jboss-cli.sh下配置,这个一句两句的说不清楚,具体实现代码如下:

[standalone@localhost:9990 /] ***data-source add –name=labDS
–jndi-name=java:jboss/labDS***(比如此处我将jta-data-source定义为java:jboss/labDS) –driver-name=postgres
–connection-url=jdbc:postgresql://localhost:5432/lab
–user-name=postgres –password=666 –validate-on-match=true
–background-validation=false
–valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
–exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter


详见下文:

http://blog.csdn.net/qq_33429968/article/details/53525150

待查询

参考资料

http://www.cnblogs.com/edwardlauxh/archive/2012/08/10/2632292.html

http://blog.csdn.net/yingevil/article/details/6876874

总结

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息