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来使用延迟加载
Hibernate4.3基础知识2的更多相关文章
- Hibernate4.3基础知识1
一.Hibernate 开发环境搭建 4.3 1.导包 2.创建hibernate.cfg.xml配置文件 3.创建实体类 4.创建映射文件 实体类名.hbm.xml 配置文件 二.h ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- RabbitMQ基础知识
RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- selenium自动化基础知识
什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(三) - 聚合和排序
SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...
- [SQL] SQL 基础知识梳理(四) - 数据更新
SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...
随机推荐
- 小案例-WebSocket实现简易聊天室
前言 在详解 HTTP系列之一讲到HTTP/2.0 突破了传统的"请求-问答模式"这一局限,实现了服务器主动向客户端传送数据.而本章将通过一种在单个TCP连接上进行全双工通信的协议 ...
- [PyTorch 学习笔记] 3.3 池化层、线性层和激活函数层
本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson3/nn_layers_others.py 这篇文章主要介绍 ...
- 【译】ASP.NET Core updates in .NET 5 Preview 8
.NET 5 预览版 8 现在已经可以获取了,并且已经准备好接受评估.下面列出了本次发布的新特性: 使用 Microsoft.Identity.Web 进行 Azure Active Director ...
- Spring Security如何优雅的增加OAuth2协议授权模式
一.什么是OAuth2协议? OAuth 2.0 是一个关于授权的开放的网络协议,是目前最流行的授权机制. 数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据.系统从而产生一个短期的进入令 ...
- 通过WordCount解析Spark RDD内部源码机制
一.Spark WordCount动手实践 我们通过Spark WordCount动手实践,编写单词计数代码:在wordcount.scala的基础上,从数据流动的视角深入分析Spark RDD的数据 ...
- Jira + confluence
Jira入门教程 敏捷开发管理(一) https://www.jianshu.com/p/145b5c33f7d0 https://www.jianshu.com/p/975385878cde JIR ...
- Android Studio相关目录
Android Studio的Android SDK的安装路径 /Users/XXX/Library/Android/sdk/ nox_adb.exe connect 127.0.0.1:62001 ...
- [BUUOJ记录] [BJDCTF 2nd]fake google
本题考查python jinjia2的ssti,其实tplmap直接梭哈都可以 随便输入一个值,查看源代码就能看到一个Hint: 用下面的流程图测试一下,看看是什么模板引擎: 用Payload测试之后 ...
- Kibana的安装
了解ELK Kibana 安装 Kibana的版本要和ES的一致 下载完毕后解压 这个解压就有点慢了 ELK的东西基本都是开箱即用的 解压后的目录 进入bin 双击启动kibana.bat 哎:启动从 ...
- 使用java爬虫从雪球网下载股票数据
雪球网也是采用Ajax方式展示数据,我依然采用开发者工具查看其访问地址和返回数据. 访问使用到的库是jsoup,解析返回的json用的类库是jackson,二者的依赖是: <!-- jsoup ...