• Hibernate4.3基础知识2


    一、数据库的隔离级别

      脏读 不可重复读 幻读
    Read uncommited Y Y Y
    Read commited N Y Y
    Repeatable read N N Y
    Serializable N N N

    查询MySql隔离级别:select @@gloable.tx_isolation,@@tx_isolation

    二、Session的flush

      1、使用UUID主键生成策略测试flush

      

    1 User user = new User();
    2 user.setUname("张三");
    3 user.setGender(1);
    4 user.setBirthday(new Date());
    5 //因为是uuid方式生成的主键,由Session给生成,把user对象存储在Session的临时存储区
    6 session.save(user);
    7 //发出sql语句,清理临时存储区,把dirty变成false
    8 session.flush();
    9 tx.commit();

      2、使用native主键生成策略测试flush

    1 //因为是使用native方式生成主键,所以save的时候要发出sql来产生主键,持久区有数据,dirty是true
    2 session.save(user);
    3 //把dirty变成false
    4 session.flush();
    //因为是使用native方式生成主键,所以save的时候要发出sql来产生主键,持久区有数据,dirty是true
    session.save(user);
    //把user逐出Session
    session.evict(user);
    //Session中没有数据flush没有意义
    session.flush();
    //但是commit依然会把数据提交到数据库,因为sql已经发出了
    tx.commit();

      3、session的flush能完成大量数据入库的功能

     1 for(int i = 0; i < 100009; i++){
     2    User user = new User();
     3    user.setUname("张三");
     4    user.setGender(1);
     5    user.setBirthday(new Date());
     6    session.save(user);
     7    if(i%100 == 0){
     8       session.flush();
     9    }
    10  }
    11  session.flush();
    12  tx.commit();

    三、多对一:

      1、创建模型:  多的一端引入一的一端作为类的成员变量,

      2、配置映射文件:

    1 <!-- 多对一关系映射 cascade: delete   save-update    all -->
    2 <many-to-one name="team" column="t_No" cascade="save-update"></many-to-one>

    cascade级联,在保存多的一端的时候,会自动级联保存一的一端

    四、一对一单向关联:

      1、创建模型:   

    1 public class IDCard {
        //主键
    2 private Integer cardId; 3 private String cardNo;
        //指定一对一的关系
    4 private Emp emp; 5 }

      2、配置映射文件 

     1 <class name="IDCard" table="t_id_card"> 
     2         <id name="cardId" column="emp_No">
     3             <!-- 使用外键方式生成主键 -->
     4             <generator class="foreign">
     5                 <param name="property">emp</param>
     6             </generator>
     7         </id>
     8         <property name="cardNo" column="card_no"></property>
     9         <!-- 指定一对一关系  constrained:建表时带有外键约束 -->
    10         <one-to-one name="emp" constrained="true"></one-to-one>
    11     </class>

     五、一对一双向关联:

      1、创建模型: 在双放都引入对应的一对一关系

      2、配置映射文件

    1 <one-to-one name="card"></one-to-one>

     六、一对多单向:

      1、创建模型:在一的一方,通过集合引入多的一方

      2、配置映射文件:

    一对多是有缺陷的,保存的时候如果多的一端的外键是非空一对多的保存就不成立

    <set name="set">
                 <!--  key:在多的一端的表中要产生的外键 column:外键名称 -->
                 <key column="t_id"></key>
                 <!-- one-to-many:指定多的一端的类 class:多的一端的类 -->
                 <one-to-many class="Emp"/>
    </set>

     七、一对多双向:

      1、创建模型:在多的一方,再添加一的一端的引入

      2、配置映射文件: 

    1 <!-- 
    2              指定多对一的关系:
    3              name:一的一端属性名
    4              column:多的一端的表中要产生的外键字段,注意在team.hbm.xml中已经配置了这个外键,
    5              现在要求我们配置的这个外键要和team.hbm.xml中配置的多的一端外键名称相同,
    6              因为这两个配置指的是同一个列
    7           -->
    8          <many-to-one name="team" column="t_id"></many-to-one>

     八、多对多单向:

      1、创建模型:在多的一方,以集合形式引入另一个多的一方

      2、配置映射文件:

    1 <!-- 配置set,设置多对多的单端集合 table:要产生的中间表   -->
    2         <set name="roles" table="emp_role" cascade="save-update">
    3             <!-- 把当前表的主键给中间表作为外键 column:当前主键名称 -->
    4             <key column="emp_No"></key>
    5             <many-to-many class="Role" column="role_id"></many-to-many>
    6         </set>

    九、多对多双向:

      1、创建模型:双发都引入对方

      2、配置映射文件“

    十、延迟加载:

      1、class上的延迟加载: get默认不使用延迟加载,load使用延迟加载,延迟加载必须在同一个session范围内

      2、集合的延迟加载:默认是有延迟加载的,  集合的加载效果不受类上延迟加载影响

      如果查询集合数量时候,需要用lazy="extra" 提高效率

      3、单端延迟加载

      针对多对一 和  一对一 的延迟加载,默认是lazy=proxy来使用延迟加载

        

  • 相关阅读:
    JS中的instanceof和typeof
    JSONP跨域的原理解析
    svn add 忽略node_modules
    淘宝flexible.js的使用
    最简单的方式实现rem布局
    关于不同retina的布局
    es5实现es6方法
    Webpack loaderUtils.parseQuery()
    npm操作命令
    阿里云服务器配置https
  • 原文地址:https://www.cnblogs.com/cat-fish6/p/8670751.html
Copyright © 2020-2023  润新知