Hibernate面试题及答案(11道常见必考题解析)

Hibernate面试题及答案(11道常见必考题解析)-mikechen

Java面试经常问到到Hibernate相关的面试题,今天给大家总结了常见的Hibernate面试题及答案详解@mikechen

Hibernate的理解?

Hibernate是一个ORM框架,Hibernate实现了Java对象与关系数据库记录的映射关系,对JDBC做了轻量级的封装,简化了数据访问层编码。

Hibernate支持各种关系数据库,有了Hibernate就不需要写jdbc代码了,直接调用hibernate的方法就可以了,比如save、get等,简化了操作数据库。

 

Hibernate的优缺点?

Hibernate优点:

1)对象化:使用时只需要操纵对象,抛弃了数据库中心的思想,完全的面向对象思,比如如:组合,继承,多态等;

2)移植性:对于不同的数据库,开发者只需要使用相同的数据操作即可;

3)效率高:Hibernate提供了大量的封装(这也是它最大的缺点),开发者不需写大量的sql语句,这就极大的提高了开发者的开发效率;

4)缓存机制:Hibernate提供了缓存机制(session缓存,二级缓存,查询缓存),对于那些改动不大且经常使用的数据,可以将它们放到缓存中。

 

Hibernate缺点:

1)要使用数据库的特定优化机制的时候,不适合用Hibernate

原因是:Hibernate对持久层封装过于完整,导致开发人员无法对SQL进行优化,无法灵活使用JDBC的原生SQL。

2)框架中使用ORM原则,导致配置过于复杂

比如:一旦遇到大型项目,比如300张表以上,配置文件和内容是非常庞大的。

3)Hibernate在批量数据处理时有弱势

比如:对于批量的修改,删除不适合用Hibernate,这也是ORM框架的弱点。

 

Hibernate的工作原理?

Hibernate面试题及答案(11道常见必考题解析)-mikechen

1)读取并解析配置文件;

读取并解析hibernate.cfg.xml配置文件

2)读取并解析映射信息:hibernate.cfg.xml中的读取并解析映射信息;

3)创建SessionFactory;

SessionFactory sf = config.buildSessionFactory();

4)打开Sesssion;

Session session = sf.openSession();

5)创建并启动事务;

Transaction tx = session.beginTransaction();

6)操作数据库,并持久化操作;

persistent operate

7)提交事务;

tx.commit();

8)关闭Session;

9)关闭SesstionFactory

 

Hibernate核心接口有哪些?

1)Configuration :类负责管理Hibernate的配置信息。数据库配置,驱动类等,Xml文件(hibernate.cfg.xml);

2)SessionFactory(会话工厂) :应用程序从SessionFactory里获得Session(会话)实例。通常情况下,整个应用只有唯一的一个会话工厂;

3)Session(会话): 它代表与数据库之间的一次操作,也称为持久化管理器,因为它是与持久化有关的操作接口,工作完成后,需要关闭;

4)Transaction(事务): 它将应用代码从底层的事务实现中抽象出来,可能是一个JDBC事务或者JTA用户事务或通过对象代理结构(CORBA);

5)Query与Criteria(数据检索);

6)Interceptor(拦截机制)。

 

Hibernate的数据三种状态?

Hibernate把他所管理的数据划分为三种状态:

1)瞬时的

直接 new 出来的对象,该对象还没被持久化,没保存在数据库中,不受 Session 管理。

 

2)持久的

当调用 Session 的 save、saveOrupdate、或者:get、load、list 等方法的时候,对象就是持久化状态。

 

3)游离的

Session 关闭之后对象就是游离状态,当脱管对象被重新关联到session上时,并再次转变成持久对象。

 

Hibernate有哪几种关系映射?

一种是1对1,一种1对多,一种是多对多。

 

Hibernate 的缓存机制?

1)一级缓存(Session缓存)

Hibenate中一级缓存,也叫做session的缓存, 只在session范围有效,Session关闭一级缓存失效。

 

2) 二级缓存(SessionFactory缓存)

二级缓存是基于应用程序的缓存,所有的Session都可以使用,Hibernate提供的二级缓存有默认的实现,且是一种可插配的缓存框架。

如果用户想用二级缓存,只需要在hibernate.cfg.xml中配置即可,如下所示:

<property name="hibernate.cache.use_second_level_cache">true</property>
 
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

支持配置第三方的缓存,如:EhCache。

 

什么内容适合放入二级缓存?

经常被访问、改动不频繁、数量有限。

 

Hibernate查询数据的方式?

主要分为如下三种:

  • hql;
  • 条件查询QBC(Query By Criteria);
  • 原生sql (通过createSQLQuery建立);

 

hibernate二级缓存如何失效?

  • set use_second_level_cache as false;
  • CACHEMODE.IGNORE;
  • NOCACHEPROVIDER。

 

Hibernate是如何延迟加载?

通过设置属性lazy进行设置是否需要懒加载,当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,从而提高了服务器的性能。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法