hibernate面试题及答案
求职应聘,面试技巧的准备是必不可少的环节。快来学习hibernate面试题及答案啦,增加面试通过率,带你一起学习。
一. Hibernate工作使用步骤?
1. 读取并解析配置文件
2. 读取并解析映射信息,创立SessionFactory
3. 翻开Sesssion
4. 创立事务Transation
5. 持久化操作
6. 提交事务
7. 关闭Session
8. 关闭SesstionFactory
二.Hibernate的查询方式有几种?
(1)导航对象图检索方式。根据已经加载的对象,导航到其他对象。
(2)OID查询方式。根据对象的OID来查询对象。Session的get()和load()方法。
(3)HQL查询方式。HQL是面向对象的查询语言,session的find()方法用于执行HQL查询语句。可以利用Query接口。
Query query = ateQuery(“from Customer as c where c.name =: customerN ame”);
query.setString(“customerName”,”张三”); List resultList = query.list();
(4)QBC查询方式。这种API封装了基于字符串形式的查询语句。
Criteria criteria = ateCriteria(User.class); Criterion criterion1 = Expession.like(“name”,”T%”);
Criterion criterion2 = Expession.eq(age,new
Integer(30));
criteria = criteria.add(criterion1);
criteria = criteria.add(criterion2);
List resultList = criteria.list();
这种查询方式使用的较少,主要是在查询中需要用户输入一系列的查询条件,如果采用HQL查询代码会比较烦。
(5)本地SQL查询
三.Hibernate的检索策略有几种?
立即检索----立即加载检索方法指定的对象。
延迟检索----延迟加载检索方法指定的对象,只有当初次获取其属性或调用其方法时才加载。
如果将元素的lazy熟悉设置为true,那么Load()方法是延迟加载。
而不管lazy是true或false,get()和find()方法永远是立即检索。
session.load()和()的区别
Session.load/get方法均可以根据指定的实体类和id从数据
库读取记录,并返回与之对应的实体对象。其区别在于:如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个
ObjectNotFoundException。执行load方法并不会真正去查询DB,只有当首次访问实体对象属性时才会去DB中真正查询。(即懒加载)
Load方法返回实体的代理类实例,而get方法永远直接返回实体类。
load支持延迟加载,get不支持延迟加载。
load方法可以充分利用内部缓存和二级缓存中的现有数据,而get方法那么仅仅在内部缓存中进展数据查,如没有发现对应数据,将越过二级缓存,直接调用SQL完成数据读取。
四.Hibernate的缓存
Hibernate有2级缓存。
第一级缓存是session缓存,其是事务范围内的缓存,第一级缓存也是必需要的,无法去除。在第一级缓存中,每个持久化的实例对象都有一个OID.
第二级缓存是SessionFactory的外置缓存,是一个可以插拔的缓存插件,由SessionFactory负责管理。第二级缓存是进程范围内的或者集范围内的缓存。
一.Hibernate中对象的状态有几种?
3种状态,瞬时状态,持久化状态,游离状态。
(1) 瞬时状态----刚用new语句创立,尚未持久化,没有被session所关联,DB中也没有对
象的记录。
(2) 持久化状态----跟session关联,跟数据库中的相关记录对应。
sql查询面试题及答案(3) 游离状态-----由持久化对象转变而来,不再和session关联,数据库中有可能存在与
之对应的记录。
二.Hibernate中关于继承关系的映射方式
(1)每个类分层构造一张表
优点:简单,只需要一张表,查询效率高。
缺点:需要在表中引入额外区分各个子类的字段,不能为所有的子类成员属性对应的字段定义Not null约束。
适用范围:查询性能要求高,子类属性不是很多时。
(2)每个子类一张表,每张表中仅仅包含在当前类中定义的属性,不包含父类或子类的成员属性。
优点:支持多态查询和关联查询,符合关系数据模型的设计规那么。缺点:查询效率不是很高,需要通过表的内连接或左外连接进展查询。适用范围:子类属性非常多,需要对子类某些属性对应的字段加Not null约束,且对性能要求不是很高时。
(3)每个详细类一张表,每张表中包含在当前类及其父类中的所有成员属性对应的字段。
优点:可以对子类的成员属性定义Not null约束。缺点:不符合关系数据模型的设计规那么,而且每个表中都存在基类的多余字段。适用范围:一般不使用。
三.数据库事务隔离级别
数据库系统提供了四种事务隔离级别供用户选择。不同的隔离级别采用不同的锁类型来实现,在四种隔离级别中,Serializable 的隔离级别最高,Read Unmited的隔离级别最低。大多数据库默认
的隔离级别为Read Commited,如SqlServer,当然也有少部分数据库默认的隔离级别为Repeatable Read ,如Mysql
? Read Unmited:读未提交数据(会出现脏读,不可重复读和幻读)。
? Read Commited:读已提交数据(会出现不可重复读和幻读) ? Repeatable Read:可重复读(会出现幻读)
? Serializable:串行化
1. 请说出Hibernate中持久化对象的生命周期以及各种状态直接的区别,并描述相互之间是如何转换的。
Hibernate中持久化对象的生命周期有临时态、持久态和游离态三种。
处于临时态的对象主键值为空,并且未与session关联,数据未保存到数据库中
处于持久态的对象与session关联起来,持久化后对象中的数据被保存到数据库中,并且主键值按照.l文件中配置的生成方式生成相应的值
处于游离态的对象脱离了session的管理,是持久化后的一种状态,主键值按照.l文件中配置的生成方式生成相应的值
当new一个新的对象时,该对象处于临时态
当该对象被当作session的参数使用的时候,该对象处于持久态
事务提交,session关闭后,该对象处于游离态
2.hibernate与数据库连接的实现?并解释了一下,例如文件是通过流来实现的!hibernate与数据库连接是通过什么实现的? Hibernate与数据库的连接是通过JDBC实现的

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。