hibernate面试题及答案

时间:2022-04-01 23:00:13 面试技巧 我要投稿
  • 相关推荐

hibernate面试题及答案

  求职应聘,面试技巧的准备是必不可少的环节。快来学习hibernate面试题及答案啦,增加面试通过率,阳光网小编带你一起学习。

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 = session.createQuery(“from Customer as c where c.name =: customerName”);

  query.setString(“customerName”,”张三”); List resultList = query.list();

  (4)QBC查询方式。这种API封装了基于字符串形式的查询语句。

  Criteria criteria = session.createCriteria(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的检索策略有几种?

  立即检索----立即加载检索方法指定的对象。

  延迟检索----延迟加载检索方法指定的对象,只有当初次获取其属性或调用其方法时才加载。

  如果将<class>元素的lazy熟悉设置为true,那么Load()方法是延迟加载。

  而不管lazy是true或false,get()和find()方法永远是立即检索。

  session.load()和session.get()的区别

  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面试题及答案(二)

  一.Hibernate中对象的状态有几种?

  3种状态,瞬时状态,持久化状态,游离状态。

  (1) 瞬时状态----刚用new语句创建,尚未持久化,没有被session所关联,DB中也没有对

  象的记录。

  (2) 持久化状态----跟session关联,跟数据库中的相关记录对应。

  (3) 游离状态-----由持久化对象转变而来,不再和session关联,数据库中有可能存在与

  之对应的记录。

  二.Hibernate中关于继承关系的映射方式

  (1)每个类分层结构一张表

  优点:简单,只需要一张表,查询效率高。

  缺点:需要在表中引入额外区分各个子类的字段,不能为所有的子类成员属性对应的字段定义Not null约束。

  适用范围:查询性能要求高,子类属性不是很多时。

  (2)每个子类一张表,每张表中仅仅包含在当前类中定义的属性,不包含父类或子类的成员属性。

  优点:支持多态查询和关联查询,符合关系数据模型的设计规则。 缺点:查询效率不是很高,需要通过表的内连接或左外连接进行查询。 适用范围:子类属性非常多,需要对子类某些属性对应的字段加Not null约束,且对性能要求不是很高时。

  (3)每个具体类一张表,每张表中包含在当前类及其父类中的所有成员属性对应的字段。

  优点:可以对子类的成员属性定义Not null约束。 缺点:不符合关系数据模型的设计规则,而且每个表中都存在基类的多余字段。 适用范围:一般不使用。

  三.数据库事务隔离级别

  数据库系统提供了四种事务隔离级别供用户选择。不同的隔离级别采用不同的锁类型来实现,在四种隔离级别中,Serializable的隔离级别最高,Read Uncommited的隔离级别最低。大多数据库默认的隔离级别为Read Commited,如SqlServer,当然也有少部分数据库默认的隔离级别为Repeatable Read ,如Mysql

   Read Uncommited:读未提交数据(会出现脏读,不可重复读和幻读)。

   Read Commited:读已提交数据(会出现不可重复读和幻读)

   Repeatable Read:可重复读(会出现幻读)

   Serializable:串行化

  hibernate面试题及答案(三)

  1. 请说出Hibernate中持久化对象的生命周期以及各种状态直接的区别,并描述相互之间是如何转换的。

  Hibernate中持久化对象的生命周期有临时态、持久态和游离态三种。

  处于临时态的对象主键值为空,并且未与session关联,数据未保存到数据库中

  处于持久态的对象与session关联起来,持久化后对象中的数据被保存到数据库中,并且主键值按照.hbm.xml文件中配置的生成方式生成相应的值

  处于游离态的对象脱离了session的管理,是持久化后的一种状态,主键值按照.hbm.xml文件中配置的生成方式生成相应的值 当new一个新的对象时,该对象处于临时态

  当该对象被当作session的参数使用的时候,该对象处于持久态

  事务提交,session关闭后,该对象处于游离态

  2.hibernate与数据库连接的实现?并解释了一下,例如文件是通过流来实现的!hibernate与数据库连接是通过什么实现的? Hibernate与数据库的连接是通过JDBC实现的

  3.spring和hibernate的事务管理方式有什么不同? hibernate的事务管理方式仅仅就是托管给JDBC(如果用JTA那么就是JTA),而JDBC的一切行为包括事务是基于一个connection的,那么hibernate委托给JDBC的事务也就是基于一个session。JTA与JDBC事务不同在于可以跨连接。

  spring也是调用hibernate中事务管理的API。hibernate的事务管理,一般是编程性的。而委托给spring之后,可以使用声明式的,也就是可以在XML之中配置哪些需要进行事务管理,哪些不需要

  4.用hibernate的session时要注意几点

  1.在更新数据时,要用open()

  2.使用完之后,要close(),这样连接池会回收该连接。

  5.说说在hibernate中使用Integer做映射和使用int做映射之间有什么差别

  使用int做映射,hibernate会自动把int类型转换为Integer类型,以便统一以对象方式处理数据。使用Integer就无须转换。 在从数据库中取数据的时候,如果是用Integer做的映射,则要求PO对象中对应的类型也必须为Integer类型,使用的时候需要转换为int。如果是int型,则无须转换。

  6.一个网站应用,请设计一个持久化类User,他可能有多张会员卡号、需要多个email地址(数量不定)作为其身份验证的方式

  设计三个类。User类、会员卡类和email类。User类与会员卡类和email类之间是一对多的关系

  7.请简单评价该设计的优劣:身份证号码作为一个person表的主键

  一个表的主键值设计最好不要采用具有业务含义的字段。理由有二:

  1.具有业务含义的字段的长度不固定

  2.具有业务含义的字段的取值范围不定。可能是纯数字,也可能是纯字符,或者是数字和字符的混合情况。

  上述两个方面一但发生变动将不利于业务层的处理。

【hibernate面试题及答案】相关文章:

android面试题及答案04-04

mybatis面试题及答案05-11

测试面试题及答案04-08

.net面试题及答案04-08

护士面试题及答案04-09

行政面试题及答案04-09

企业面试题及答案04-09

护理面试题及答案04-09

销售面试题及答案04-09

大学面试题及答案04-09