一、数据库的隔离级别

  脏读 不可重复读 幻读
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来使用延迟加载

    

Hibernate4.3基础知识2的更多相关文章

  1. Hibernate4.3基础知识1

    一.Hibernate 开发环境搭建 4.3 1.导包    2.创建hibernate.cfg.xml配置文件   3.创建实体类   4.创建映射文件 实体类名.hbm.xml  配置文件 二.h ...

  2. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  3. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  4. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  5. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  6. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  7. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  8. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  9. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

随机推荐

  1. 洛谷 P3951 NOIP 2017 小凯的疑惑

    洛谷 P3951 NOIP 2017 小凯的疑惑 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付 ...

  2. JavaScript基础语法资料

    JavaScript基础第01天 1 - 编程语言 1.1 编程 编程: 就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 计算机程序: 就是计算机所执行的一系列的 ...

  3. 都2020年了,还再问GET和POST的区别?【深度好文】

    最近看了一些同学的面经,发现无论什么技术岗位,还是会问到 get 和 post 的区别,而搜索出来的答案并不能让我们装得一手好逼,那就让我们从 HTTP 报文的角度来撸一波,从而搞明白他们的区别. 一 ...

  4. windows环境安装vue-cli及webpack并创建vueJs项目

    1. 安装node.js 2. 如果安装的是旧版本的 npm,可以通过 npm 命令来进行版本升级,命令如下: npm install npm -g npm网站服务器位于国外,所以经常下载缓慢或出现异 ...

  5. spring集成shiro,事务失效问题 not eligible for auto-proxying

    BeanPostProcessor bean实例化顺序有关,@Configuration会最先实例化,也就是在spring启动完成之前. 导致Configuration中使用的注入,没能在spring ...

  6. 20190923-07Linux搜索查找类 000 015

    find 查找文件或者目录 find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端. 1.基本语法 find [搜索范围] [选项] 2.选项说明 表1-27 选项 功能 -n ...

  7. [Oracle/SQL]找出id为0的科目考试成绩及格的学生名单的四种等效SQL语句

    本文是受网文 <一次非常有意思的SQL优化经历:从30248.271s到0.001s>启发而产生的. 网文没讲创建表的数据过程,我帮他给出. 创建科目表及数据: CREATE TABLE ...

  8. 原生JDK网络编程- NIO

    什么是NIO? NIO 库是在 JDK 1.4 中引入的.NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提供了高速的.面向块的 I/O.NIO翻译成 no-blocking io 或 ...

  9. 关于ES6的let、const那些事儿

    Babel 转码器 Babel是广泛使用的一个ES6转换器,将ES6代码转换成ES5代码,从而实现在老版本的浏览器执行. let和const命令 let所声明的变量只在let命令所在的代码块内是有效的 ...

  10. C#通过Com串口进行Barcode Printer

    前言 工作中有遇到Barcode打印的需求,最开始是通过打印机型号找到对应的打印机,再进行操作,但是需要匹配的打印机型号太多,而且不定,所以处理起来太过麻烦. 后面通过找到通过串口找到打印机,直接传输 ...