博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate小解惑
阅读量:7106 次
发布时间:2019-06-28

本文共 1415 字,大约阅读时间需要 4 分钟。

 
1、什么是SessionFactory?什么是Session?httpsession和hibernate的session的有什么区别?
    SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。----百度百科
   在hibernate中的session并不是http中所说的session,一般把HttpSession对象称为用户会话。。。
   而hibernate中的Session呢?是用来表示,应用程序和数据库的一次交互(会话)。在这个Session中,包含了一般的持久化方法(CRUD)。而且,Session是一个轻量级对象(线程不安全),通常将每个Session实例和一个数据库事务绑定,也就是每执行一个数据库事务,都应该先创建一个新的Session实例,在使用Session后,还需要关闭Session
 
2、n+1问题?
一般而言说n+1意思是,无论在一对多还是多对一当查询出n条数据之后,每条数据会关联的查询1次他的关联对象,这就叫做n+1。
下面是3中解决方案:
    1. 设置@ManyToOne的fetch属性值为fetchType.LAZY,这种方式解决后,后面的n条sql语句按需而发。但是有个弊端,就是如果需要级联查询就无法获取级联对象了。
    2. 设置@BatchSize(size=5)(该注解要加在类上面,跟@Entity在同一位置),这样发出的sql语句减少。这个设置在一定程度上提高了效率。
    3.  join fetch , 如 使用"from Student s left join fetch s.group g", 进行表连接查询,此时就发1条SQL语句。
    4.  使用QBC查询,默认效果与3相同。
              1、fetch="select" 会另外发出一条语句查询集合
              2、 设置 fetch="join" 采用外连接集合的 lazy 失效
              3、这只 fetch="subselect" 另外发出一条 select 语句抓取前面查询到的所有的实体对象的关联集合 fetch只对 HQL 查询产生影响其他的则不会
 
 
3、Hibernate中的get和load加载有什么区别?
当我们使用session.load()方法来加载一个对象时,此时并不会发出sql语句,当前得到的这个对象其实是一个代理对象,这个代理对象只保存了实体对象的id值,只有当我们要使用这个对象,得到其它属性时,这个时候才会发出sql语句,从数据库中去查询我们的对象。
相对于load的延迟加载方式,get就直接的多,当我们使用session.get()方法来得到一个对象时,不管我们 使不使用这个对象,此时都会发出sql语句去从数据库中查询出来。
 
4、脏读和幻读?
脏读:是指当一个事务正在访问数据,且对数据做了修改,但是还没有提交到数据库。另一个事务查询到这个数据、这个数据就是脏数据,依靠这个数据所做的操作就是不正确的、
幻读:比如第一个事务对数据库的全部行进行了修改,同时第二个事务插入一条数据到数据库中,这时第一个事务就会发现,数据库中有一条记录没有被修改,像发生了幻觉一样、

转载地址:http://ryjhl.baihongyu.com/

你可能感兴趣的文章
进程同步(OS课件)
查看>>
CentOS yum出现“Could not retrieve mirrorlist ”的解决办法
查看>>
2015 1.20 总结
查看>>
java递归
查看>>
最小生成树
查看>>
BZOJ5415 [NOI2018] 归程
查看>>
Gridview, ObjectDataSource Making life easy
查看>>
P2835 刻录光盘
查看>>
转:Vim实战指南(五):文本替换
查看>>
springmvc.xml文件的位置和命名
查看>>
$.getJSON中文乱码
查看>>
[转] C语言字节对齐详解
查看>>
iOS XMPPFramework 环境配置
查看>>
正则表达式总结
查看>>
[EF]vs15+ef6+mysql这个问题,你遇到过么?
查看>>
[Html5]sessionStorage和localStorage的区别
查看>>
遍历特定类型子对象
查看>>
二逼平衡树 Tyvj 1730 BZOJ3196 Loj#106
查看>>
ORA-12541: TNS: 无监听程序 怎么解决
查看>>
自定义UIButton--iPhone按钮控件点击效果写法
查看>>