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在查询数据的时候。数据并没有存在与内存中,当程序真正对数据的操作时。对象才存在与内存中,就实现了延迟载入,他节省了server的内存开销,从而提高了server的性能。
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.表字段要少。表关联不要怕多,有二级缓存撑腰
Java面试-Hibernate总结的更多相关文章
- JAVA面试-HIBERNATE与 MYBATIS的对比
JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结 我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践 ...
- JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结
我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和 ...
- JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结(转)
hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加 ...
- 转:最近5年133个Java面试问题列表
最近5年133个Java面试问题列表 Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来 ...
- java面试宝典(蓝桥学院)
Java面试宝典(蓝桥学院) 回答技巧 这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果.由于这套试题涉及的范围 ...
- JAVA面试精选【Java基础第一部分】
这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童 ...
- 近5年133个Java面试问题列表
Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入. 在我 ...
- JAVA面试精选
JAVA面试精选[Java基础第一部分] 这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对 ...
- Java面试系列
如果你的面试简历是如下这样写的,请务必准备回答下面的所有问题. 面试职位:Java高级工程师 专业技能: (1)牢固掌握Java基础知识,如集合.并发.I/O等,并对Java源码有一定的研究. (2) ...
随机推荐
- 在Eclipse中打开Hadoop工程
1. 安装虚拟机,我用的是VMware Workstation 12 Player 2. 在VM中安装Ubuntu,我用的镜像文件是ubuntu-15.10-desktop-amd64.iso 3. ...
- Object 转 String
做项目中 : map 为Map<String,Object> a.setmoney(new BigDecimal((String)map.get("money"))); ...
- Web前端入门知识
第一阶段:理论知识 第一章:协议理解 第二阶段:了解知识 第二章:前端简介 第三阶段:入门知识 第三章:标签结构 第四章:常用标签 第四阶段:样式搭配 第五章:样式初见 第六章:属性选择 第七章:属性 ...
- Android 防护扫盲篇
一,已知防护策略 1.不可或缺的混淆 Java 是一种跨平台.解释型语言,Java 源代码编译成的class文件中有大量包含语义的变量名.方法名的信息,很容易被反编译为Java 源代码.为了防止这种现 ...
- PHP平均小数红包算法
<?php function RandMoney( $money,$num ){ $arr = array();//存放金额 $total_money = 0;//红包总金额 $thisMone ...
- SVG动画实践篇-音量变化效果
git 地址:https://github.com/rainnaZR/svg-animations/tree/master/src/pages/step2/volumn 说明 这个动画的效果就是多个线 ...
- CSS3模拟IOS滑动开关
前言 H5站点需要IOS滑动按钮的效果,想了想似乎CSS3能搞起,就折腾出来了...挺简单的..请看注释 效果 代码 <!DOCTYPE html> <html lang=" ...
- ios 使用 resignFirstResponder 无法hide键盘
- (BOOL)disablesAutomaticKeyboardDismissal { return NO;}
- SilverLight:基础控件使用(5)-TreeView控件-基本使用
ylbtech-SilverLight-Basic-Control:基础控件使用(5)-TreeView控件-基本使用 前台编辑 后台逐个添加 后台绑定数据源 1.A,返回顶部TreeView控件(树 ...
- 【Java编程】Java在dos窗体编译与运行的批处理
近期在Java编程过程中,常常使用到dos窗体对程序进行编译与执行. 可是不方便之处在于每次都要输入命令进入将要编译的程序的文件夹(事实上也有简单的方法,在文章末尾给出).于是编写了一个配置文件,能够 ...