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) ...
随机推荐
- UVA - 10196:Check The Check
类型:简单模拟 大致题意:已知国际象棋行棋规则,给你一个局面,问是否将军?谁将谁的军?(保证不会同时将军) 思路:都以小写字母 测试 是否将 大写字母. 然后一个局面测两次(一次直接测,一次反转棋盘, ...
- cin和scanf的速度差别
好长时间没有遇到这种问题了,以前虽然知道scanf比cin快,但是没想到快这么多,见图. 50万的数据. scanf输入: cin输入: 网上说用std::ios::sync_with_stdio(f ...
- VUE之命令行报错:Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead 解决办法
Failed to compile. ./node_modules/vue-loader/lib/template-compiler?{"id":"data-v-5992 ...
- man
Description n间房子高度不同,Man 要从最矮的房子按照高度顺序跳到最高的房子,你知道房子的顺序,以及Man一次最远可以跳多远,相邻的房子至少有1的距离,房子的宽不计,现在由你安排相邻房子 ...
- 安装 - LNMP一键安装包
https://lnmp.org/ 系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要5GB以上硬盘剩余空间 需要128MB以上内存( ...
- [Servlet&JSP] 从JSP到Servlet
JSP与Servlet是一体的两面,JSP最后都会被容器转译为Servlet源码,自己主动编译为.class文件,载入.class文件然后生成Servlet对象. 由容器转译后的Servlet类具有_ ...
- jQeury入门:遍历
一旦用jQuery创建一个初始的包装集.你就能深度遍历刚刚选择的包装集. 遍历能够被分为三个基础元件:父级.子级,同级.jQuery为全部这些元件提供丰富易用的方法.注意每个方法都能轻易的传递给字符串 ...
- Data Binding Guide——google官方文档翻译(上)
android引入MVVM框架时间还不长,眼下还非常少有应用到app中的.但它是比較新的技术,使用它来搭建项目能省非常多代码,并且能使用代码架构比較清晰.本篇文章是我在学习MVVM时翻译的.篇幅比較长 ...
- iOS学习笔记12-网络(一)NSURLConnection
一.网络请求 在网络开发中.须要了解一些经常使用的请求方法: GET请求:get是获取数据的意思,数据以明文在URL中传递,受限于URL长度,所以数据传输量比較小. POST请求:post是向serv ...
- 2013-06-09 12:03 如何在SQLServer中锁定某行记录
锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新 A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订 ...