Java面试-Hibernate总结

1  Hibernate的检索方式

?  导航对象图检索(根据已经加载的对象,导航到其他对象。)

?  OID检索(按照对象的OID来检索对象。)

?  HQL检索(使用面向对象的HQL查询语言。)

?  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。
QBC/QBE离线/在线)

?  本地SQL检索(使用本地数据库的SQL查询语句。)

http://blog.csdn.net/lenotang/article/details/2596680

2  Hibernate中对象的状态

?  临时状态(transient):刚刚用new语句创建,还没有被持久化,不处于Session的缓存中。处于临时状态的Java对象被称为临时对象。

?  持久化状态(persistent):已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象被称为持久化对象。

?  游离状态(detached):已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象。

http://blog.csdn.net/communicate_/article/details/8452786

3  Hibernate的3种检索策略是什么,分别适用于哪种场合

?  立即检索

优点:对应用程序完全透明。

缺点:select语句数目多。

适用:类级别。

?  延迟检索

优点:由应用程序决定加载哪些对象,可以避免执行多余的select语句以及避免加载不需要访问的对象,节省内存空间,提高检索效率。

缺点:应用程序如果要访问游离态的代理类实例,必须保证它在持久化时已经被初始化。

适用:一对多或多对多关联。应用程序不需要立即访问或者根本不会访问的对象。

?  迫切左外连接检索

优点:对应用程序完全透明,不管对象处于持久化状态还是游离状态,应用程序都可以方便的从一个对象导航到另一个与它相关联的对象。使用了外连接,select语句数目少。

缺点:可能会加载程序不许要访问的对象。复杂的数据库表连接形象检索性能。

适用:一对一或多对一关联。应用程序需要立即访问的对象。数据库系统具有良好的表连接性能。

http://blog.csdn.net/adoocoke/article/details/8291966

4  ORM解决的不匹配问题(域模型与关系模型之间存在的不匹配)

?  域模型是面向对象的,关系模型是面向关系的。

?  域模型中有继承关系,关系模型中不能直接表示继承关系。

?  域模型中有多对多关联关系,关系模型中通过连接表来表示多对多关联关系。

?  域模型中有双向关联关系,关系模型中只有单向参照关系,而且总是many参照one方。

?  域模型提倡精粒度模型,关系模型提倡粗粒度模型。

5  Hibernate映射继承关系的3种方式

?  整个的继承体系就用一张表(tableper hierarchy)

?  每个子类一张表,存放子类所特有的属性(tableper subclass)

?  每个具体类一张表(union-subclass),保存是子类完整信息(table per concrete )

http://blog.csdn.net/yanwushu/article/details/7680765

6  Session的find()方法以及Query接口的区别

Session类的find()方法以及Query接口都支持HQL检索方式。这两者的区别在于,前者只是执行一些简单HQL查询语句的便捷方法,它不具有动态绑定参数的功能,而且在Hibernate3.x版本中,已经淘汰了find()方法;而Query接口才是真正的HQL查询接口,它提供了以上列出的各种查询功能。

7  Hibernate关联关系配置

?  一对一

?  一对多

?  多对多

http://blog.csdn.net/lrain0813/article/details/5756015

8  简述Session的特点

?  不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。

?  Session实例是轻量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。

?  在Session中,每个数据库操作都是在一个事务(transaction)中进行的,这样就可以隔离开不同的操作(甚至包括只读操作)。

9  Hibernate中采用XML文件来配置对象-关系映射的优点

Hibernate既不会渗透到上层域模型中,也不会渗透到下层数据模型中。软件开发人员可以独立设计域模型,不必强迫遵守任何规范。数据库设计人员可以独立设计数据模型,不必强迫遵守任何规范。对象-关系映射不依赖于任何程序代码,如果需要修改对象-关系映射,只需修改XML文件,不需要修改任何程序,提高了软件的灵活性,并且使维护更加方便。

http://blog.csdn.net/it_man/article/details/1477317

10  Session的缓存的作用

?  减少访问数据库的频率。应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快多了,因此Session的缓存可以提高数据访问的性能。

?  保证缓存中的对象与数据库中的相关记录保持同步。当缓存中持久化对象的状态发生了变换,Session并不会立即执行相关的SQL语句,这使得Session能够把几条相关的SQL语句合并为一条SQL语句,以便减少访问数据库的次数,从而提高应用程序的性能。

11  多事务并发运行时的问题

?  第一类丢失更新

?  脏读

?  虚读/幻读

?  不可重复读

?  第二类丢失更新

http://www.iteye.com/topic/791346

12  session的清理和清空的区别

?  session清理缓存是指按照缓存中对象的状态的变化来同步更新数据库;(Hibernate包含了三类session的Flush模式)

?  清空是session清除部分或全部对象或者session关闭;

http://blog.sina.com.cn/s/blog_62a151be0100nf28.html

13  Hibernate工作原理及为什么要用

原理

1.读取并解析配置文件

2.读取并解析映射信息,创建SessionFactory

3.打开Sesssion

4.创建事务Transation

5.持久化操作

6.提交事务

7.关闭Session

8.关闭SesstionFactory

为什么要用

1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

2.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作

3.hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

4.hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

http://www.cnblogs.com/shanmu/p/3598477.html

14  Hibernate延迟加载

1.Hibernate2延迟加载实现:a)实体对象 b) 集合类型(Collection)

2.Hibernate3 提供了属性的延迟加载功能

当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。

http://blog.163.com/xi_zh_qi/blog/static/8501594200812695053939/

15  Hibernate的缓存机制

1.一级缓存又叫内部缓存存在Hibernate,属于应用事务级缓存

2.二级缓存

a) 应用及缓存

b) 分布式缓存

条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据。

c) 第三方缓存的实现

http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html

16  优化Hibernate

1.使用双向一对多关联,不使用单向一对多

2.灵活使用单向一对多关联

3.不用一对一,用多对一取代

4.配置对象缓存,不使用集合缓存

5.一对多集合使用Bag,多对多集合使用Set

6.继承类使用显式多态

7.表字段要少,表关联不要怕多,有二级缓存撑腰

http://blog.csdn.net/sprita1/article/details/9289971

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-30 11:05:01

Java面试-Hibernate总结的相关文章

JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结(转)

hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用好Mybatis还是首先要先理解好Hibernate. 比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求

转:最近5年133个Java面试问题列表

最近5年133个Java面试问题列表 Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入. 在我初入职场的时候,类似于 Vector 与 Array 的区别.HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在.如今,你将会被问到许多 Java 程序员都没有看过的领域,如 NIO,

Java 面试-- 1

JAVA面试精选[Java基础第一部分] 这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童鞋们来说,当你看到这份题目的时候,你应该感动很幸运,因为,只要你把题目中的内容都搞懂了,在笔试的时候就可以游刃有余,通过面试只有半步之遥了,笔试只能反映你的JAVA技能.不管你是面试各个级别的JAVA工程师.架构师.还是项目经理,这个系列文章都是你最宝贵的资

Java面试宝典

http://www.cnblogs.com/bluestorm/p/6429894.html Java面试宝典 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用).主要有以下优点: 可替换性:多态对已存在代码具有可替换性. 可扩充性:增加新的子类不影响已经存在的类结构. 接口性:多态是超累通过方法签名,想子类提供一个公共接口,由子类来完善或

java面试梳理

自己整理的有关java面试过的问题,有错的请矫正. 1, Spring的核心思想 控制反转和面向切面的编程 2,Spring的核心模块 反向控制与依赖注入.Bean配置以及加载 3,Scope是什么 Scope就是IOC容器里给对象设置的场景或者说存活空间,如果对象不处于Scope的限定后,容器会销毁对象. 取值有5种  分别是singleton(单一模式),prototype(多少个请求就有多少个),request(请求完即销毁),session,globalsession. 4,hibern

Java面试技巧

[Java面试一]面试复习大纲. [Java面试二]Java基础知识精华部分. [Java面试三]JavaWeb基础知识总结. [Java面试四]Strust2总结及在面试中的一些问题. [Java面试五]Spring总结以及在面试中的一些问题. [Java面试六]SpringMVC总结以及在面试中的一些问题. [Java面试七]Mybatis总结以及在面试中的一些问题. [Java面试八]Hibernate总结以及在面试中的一些问题. [Java面试九]脚本语言知识总结. [Java面试十]浏

Java面试宝典2017

JAVA面试.笔试题(2017版)                 欲想成功,必须用功!   目录 一.                  HTML&CSS部分.......................................................................................... 9 1.HTML中定义表格的宽度用80px和80%的区别是什么?...................................... 9 2.CSS样

Java面试宝典-2017

Java面试宝典2017版 一. Java基础部分...................................................................................................... 7 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?..... 7 2.Java有没有goto?.......................................................

java面试宝典(蓝桥学院)

Java面试宝典(蓝桥学院) 回答技巧 这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果.由于这套试题涉及的范围很泛,很广,很杂,大家不可能一天两天就看完和学完这套面试宝典,即使你已经学过了有关的技术,那么至少也需要半个月的时间才能消化和掌握这套面试宝典,所以,大家应该早作准备,从拿到这套面试宝典之日起,就要坚持在每天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了