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

前言

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

总结

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值