zoukankan      html  css  js  c++  java
  • JPA学习---第三节:搭建JPA开发环境和全局事务介绍

    一、创建 Java 项目

    1、导入所需的 jar 包:

    image

    2、创建 persistence.xml 文件, 代码如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0"
        xmlns="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
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
      <persistence-unit name="learn_jpa" transaction-type="RESOURCE_LOCAL">
           <provider>org.hibernate.ejb.HibernatePersistence</provider>
             
             <properties>
            <!-- 数据库方言 -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
            <!-- 数据库驱动 -->
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <!-- 数据库用户名 -->
            <property name="hibernate.connection.username" value="root" />
            <!-- 数据库密码 -->
            <property name="hibernate.connection.password" value="hwl901121" />
            <!-- 数据库连接URL -->
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/learn_jpa?useUnicode=true&amp;characterEncoding=UTF8"/>
            <!-- 最大抓取深度 -->
            <property name="hibernate.max_fetch_depth" value="3" />
            <!-- 更新方式创建库表 -->
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <!-- 显示SQL -->
            <property name="hibernate.show_sql" value="false" />
            <!-- 格式SQL -->
            <property name="hibernate.format_sql" value="true" />
         </properties>
      </persistence-unit>
    </persistence>

    详解:

    persistence-unit:持久化单元,简单说,就是代表一堆实体bean的集合,那么这堆实体bean,我们叫他们做实体bean单元。我们在学Hibernate就已知道,他们就是专门用于跟数据库映射的普
    通的Java对象,在我们JPA里面,这些对象叫做实体bean。持久化单元就是一堆实体bean的集合,我们为这堆集合取个名称,<persistence-unit name="..."><persistence-unit/>,可以有好几个这样的持久化单元,也就是它们会和不同的数据库打交道。

    name属性用于定义持久化单元的名字 (name必选,空值也合法); transaction-type 指定事务类型(可选 RESOURCE_LOCAL 或 JTA)

    hibernate.hbm2ddl.auto:

    参数的作用主要用于:自动创建|更新|验证数据库表结构

    hibernate.hbm2ddl.auto 值:

    create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
    create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
    update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。
    validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

    二、RESOURCE_LOCAL 管理事务和 JTA管理事务的区别:

    1、JTA事务(Java Transaction API)是J2EE规范中有关事务的标准。它是容器级别的事务,只能运行在J2EE服务器中。它的最大优势是可以支持分布式的事务,如果系统采用的是分布式的数据库,那么只能选择JTA管理EntityManager事务。

    使用JTA管理EntityManager事务时,需要注意以下几个问题。

    — JTA事务只能运行在J2EE的环境中,即EJB容器中和Web容器中;而在J2SE环境中只能使用RESOURCE_LOCAL管理事务。

    — 容器托管的EntityManager对象只能采用JTA的事务,而不能采用RESOURCE_LOCAL事务。

    2、RESOURCE_LOCAL事务数据库本地的事务。它是数据库级别的事务,只能针对一种数据库,不支持分布式的事务。对于中小型的应用,可以采用RESOURCE_LOCAL管理EntityManager事务。

    使用RESOURCE_LOCAL管理EntityManager事务时需要注意以下几个问题。

    — 在J2SE环境中,只能使用RESOURCE_LOCAL管理EntityManager事务,并且EntityManager对象是以应用托管方式获得的。

    — 代码中使用RESOURCE_LOCAL管理事务时,要通过调用EntityManager的getTransac- tion()方法获得本地事务对象。

    http://brushupo.blog.sohu.com/95340446.html

  • 相关阅读:
    React的一些原则
    CSS/H5保留显示 textarea输入的空格和换行
    一种css效果:标题带色块,React+Less
    Taro,实现小程序在样式文件中导入背景图片
    JS合并两个函数
    bootstrap-table使用stickyHeader固定表头时,表头不跟随表体水平滚动问题解决
    二次封装bootstrap-table及功能优化
    iframe在ios上不能滚动问题解决
    移动端滚动不流畅问题
    Error: Chromium revision is not downloaded. Failed to download Chromium
  • 原文地址:https://www.cnblogs.com/hwlsniper/p/4077538.html
Copyright © 2011-2022 走看看