前言
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