MyException - 我的异常网
当前位置:我的异常网» Java面试 » Java面试-Hibernate小结

Java面试-Hibernate小结

www.MyException.Cn  网友分享于:2015-08-26  浏览:0次
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包含了三类sessionFlush模式)

Ø  清空是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


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

文章评论

“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
老程序员的下场
老程序员的下场
我的丈夫是个程序员
我的丈夫是个程序员
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
一个程序员的时间管理
一个程序员的时间管理
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员应该关注的一些事儿
程序员应该关注的一些事儿
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
漫画:程序员的工作
漫画:程序员的工作
旅行,写作,编程
旅行,写作,编程
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序员都该阅读的书
程序员都该阅读的书
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
10个调试和排错的小建议
10个调试和排错的小建议
Java程序员必看电影
Java程序员必看电影
如何成为一名黑客
如何成为一名黑客
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
我是如何打败拖延症的
我是如何打败拖延症的
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员和编码员之间的区别
程序员和编码员之间的区别
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
总结2014中国互联网十大段子
总结2014中国互联网十大段子
 程序员的样子
程序员的样子
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
每天工作4小时的程序员
每天工作4小时的程序员
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
鲜为人知的编程真相
鲜为人知的编程真相
程序员的鄙视链
程序员的鄙视链
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
中美印日四国程序员比较
中美印日四国程序员比较
那些争议最大的编程观点
那些争议最大的编程观点
程序员必看的十大电影
程序员必看的十大电影
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有