Hibernate小解惑

简介:   1、什么是SessionFactory?什么是Session?httpsession和hibernate的session的有什么区别?     SessionFactory接口负责初始化Hibernate。

 
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、脏读和幻读?
脏读:是指当一个事务正在访问数据,且对数据做了修改,但是还没有提交到数据库。另一个事务查询到这个数据、这个数据就是脏数据,依靠这个数据所做的操作就是不正确的、
幻读:比如第一个事务对数据库的全部行进行了修改,同时第二个事务插入一条数据到数据库中,这时第一个事务就会发现,数据库中有一条记录没有被修改,像发生了幻觉一样、
目录
相关文章
|
SQL XML Java
一篇文章让你马上入门Hibernate
一篇文章让你马上入门Hibernate
|
SQL 存储 前端开发
一文解惑mybatis中的#{}和${}
一文解惑mybatis中的#{}和${}
|
XML SQL 缓存
Hibernate基础知识
Hibernate基础知识
104 0
|
SQL Java 数据库连接
hibernate入门学习笔记
hibernate入门学习笔记
83 0
|
SQL Java 数据库连接
Hibernate入门这一篇就够了(三)
Hibernate入门这一篇就够了
120 0
Hibernate入门这一篇就够了(三)
|
XML Java 数据库连接
Hibernate入门这一篇就够了(二)
Hibernate入门这一篇就够了
160 0
Hibernate入门这一篇就够了(二)
|
Oracle Java 关系型数据库
Hibernate入门这一篇就够了(四)
Hibernate入门这一篇就够了
149 0
Hibernate入门这一篇就够了(四)
|
SQL XML 前端开发
Hibernate入门这一篇就够了(一)
Hibernate入门这一篇就够了
211 0
Hibernate入门这一篇就够了(一)
|
SQL 存储 Java
Hibernate入门教程
Hibernate 随心所欲的使用面向对象思想操纵数据库. Table of contents 介绍 搭建开发环境 半sql半面向对象写法 完全的sql写法 完全的面向对象写法 Hibernate Hibernate是一个开放源代码的对象关系映...
1426 0
|
SQL Java 数据库连接
Hibernate入门这一篇就够了
前言 本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门,相信你们看了就会使用Hibernate了! 什么是Hibernate框架? Hibernate是一种ORM框架,全称为 Object_Relative DateBase-Mapping,在Java对象与关系数据库之...
1266 0