zoukankan      html  css  js  c++  java
  • 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来使用延迟加载

        

  • 相关阅读:
    7月的尾巴,你是XXX
    戏说Android view 工作流程《下》
    “燕子”
    Android开机动画bootanimation.zip
    戏说Android view 工作流程《上》
    ViewController里已连接的IBOutlet为什么会是nil
    My first App "Encrypt Wheel" is Ready to Download!
    iOS开发中角色Role所产生的悲剧(未完)
    UIScrollView实现不全屏分页的小技巧
    Apple misunderstood my app,now my app status changed to “In Review”
  • 原文地址:https://www.cnblogs.com/cat-fish6/p/8670751.html
Copyright © 2011-2022 走看看