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

Hibernate学习–JPA配置文件persistence.xml解析前言JPA和Hibernate的水太深,搞到现在还是不大明白,先拿出来晒晒。日后还会更新。JPA是什么JavaEE5.0的平台的ORM标准规范。为应用程序访问持久层提供统一的方式。(用于数据库访问之类的)JPA与Hibernate的关系JPA是规范,Hibernate是实现。从功能上来讲,JPA是Hibernate的一个子集。Hibernate只是JPA的一个提供商。类

前言

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

总结

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/36570.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注