A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Hibernate常见面试问题汇总
0、hibernate 优缺点
①. 优点:
>对 JDBC 访问数据库的代码做了封装,简化了数据访问层繁琐的重复性代码
>映射的灵活性, 它支持各种关系数据库, 从一对一到多对多的各种复杂关系.
>非侵入性、移植性会好
>缓存机制: 提供一级缓存和二级缓存
②. 缺点:
>无法对 SQL 进行优化
>框架中使用 ORM原则, 导致配置过于复杂
>执行效率和原生的JDBC 相比偏差: 特别是在批量数据处理的时候
>不支持批量修改、删除
  
1、Hibernate中get和load有什么不同之处?
  
    hibernate get和load区别(面试)
  
       1)发送sql时机
  
              get:立即发送sql
  
              load:延迟发送sql,用对象里的非id属性会发送sql
  
       2)返回对象是什么
  
              get:返回持久化类本身
  
              load:返回子类代理,子类代理javassist-3.18.1-GA.jar,这个包在struts2里同样,整合,高版本的
  
       3)如果查询oid在数据库中不存在?
  
              get:返回null
  
              load:异常
  
2、hibernate常用主键生成策略
  
       1)identity:支持自动增长(mysql,sqlserver),
  
       2)  sequence:数据库支持序列(oarcle,db2)
  
              默认:create sequence hibernate_sequence
  
  
              自定义序列
  
                     <id  name="id">
  
                            <generator  class="sequence">
  
                                   <param  name="sequence_name">seq_tt</param>
  
                            </generator>
  
                     </id>
  
  
       3)  uuid:只要数据库支持字符 就可以,优点:效率高,移值性强,char(32)
  
       4)  native:缺点:效率低,扩展性强,支持自动增长,序列
  
3、定义一简单的注解实体类
  
       @Entity  // 定义了一个实体
  
       @Table(name  = "t_book")
  
       public  class Book {
  
  
       @Id  // 主键
  
       //  @GeneratedValue //native
  
       @GeneratedValue(strategy  = GenerationType.IDENTITY) // identity
  
       private  Integer id; // 主键
  
  
       private  String name;
  
4、hibernate查询操作,实际开发中的一个应用场景,
  
              1、OID查询
  
                     修改,
  
              2、HQL查询
  
                     不适合大量的关联查询 ,
  
              3、Criteria
  
                     不适合大量的关联查询 ,而且一两张表的之间,而且查询sql条件多,sql可读性差,条件多比较乱
  
              4、SQL
  
                     适合大量的关系查询,复杂的sql语句,写的复杂sql我们一般需要在数据库工具中
  
                     select  * from
  
                     left  join
  
                     left  join
  
                     left  join
  
                     left  join
  
              增加修改删除 ,我们建议用save,update,delete
  
5、Hibernate中的Session指的是什么? 可否将单个的Session在多个线程间进行共享?
  
前面的问题问完之后,通常就会接着再问这两个问题。问完SessionFactory的问题后就该轮到Session了。Session代表着Hibernate所做的一小部分工作,它负责维护者同数据库的链接而且 不是线程安全的,也就是说,Hibernage中的Session不能在多个线程间进行共享。虽然Session会以主动滞后的方式获得数据库连接,但是Session最好还是在用完之后立即将其关闭。
  
6说说 Hibernate 的缓存:
  
Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存:
  
1). Hibernate一级缓存又称为“Session的缓存”,它是内置的,不能被卸载。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存。在第一级缓存中,持久化类的每个实例都具有唯一的OID。
  
2).Hibernate二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的,是一个可配置的插件,在默认情况下,SessionFactory不会启用这个插件。
  
当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;如果都查不到,再查询数据库,把结果按照ID放入到缓存删除、更新、增加数据的时候,同时更新缓存。
  


6 个回复

倒序浏览
总结的真的到位,学习了,也收藏了
回复 使用道具 举报
张斯佳 发表于 2017-12-6 14:20
总结的真的到位,学习了,也收藏了

嗯 ,都之前面试常问的。
回复 使用道具 举报
移植性应该就是指的系统换数据库了,不需要改动大量代码吧
回复 使用道具 举报
感谢分享,第一时间收藏
回复 使用道具 举报
感谢分享,第一时间收藏
回复 使用道具 举报
虽然看不懂但是好厉害的样子啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马