hibernate面试题汇总

参考文章:
http://apps.hi.baidu.com/share/detail/1192410 
http://www.mianwww.com/html/category/it-interview/hibernate
一、hibernate的缓存机制:
二、hibernate的三种状态转换:
三、hibernate的工作原理:

原理:

1. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">读取并解析配置文件</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

2. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">读取并解析映射信息,创建SessionFactory</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

3. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">打开Sesssion</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

4. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">创建事务Transation</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

5. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">持久化操作</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

6. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">提交事务</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

7. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">关闭Session</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

8. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">关闭SesstionFactory</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

四、hibernate如何延迟加载:
      
hibernate2.x版本中,lazy默认值是“false”,但hibernate3.x已经将lazy的默认改为“true”了

五、为什么用hibernate:

1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作

3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

六、hibernate如何实现分页:
七、load()和get()的区别:
两加载方法区别:
Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。 其区别在于:
1.如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。
2.Load方法可返回实体的代理类实例,而get方法永远直接返回实体类。
3.load方法可以充分利用内部缓存和二级缓存中的现有数据,而get方法则仅仅在内部缓存中进行数据查找,如没有发现对应数据,将越过二级缓存,直接调用SQL完成数据读取。
4.load支持延迟加载,get不支持延迟加载。
        总 结:  load和get都会先去session缓存中查找是否存在该对象,存在返回,不存在时,get方法就直接去数据库中查询并返回,而load是先创建一个对象保存于session缓存中,待真正用到的时候才去查询数据库,即load支持延迟加载,get不支持;

 

八、 在数据库中条件查询速度很慢的时候,如何优化?
  1.建索引
  2.减少表之间的关联
  3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据量大的表排在前面
  4.简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据
九、hibernate的查询方式:
十、hibernate的update和saveOrupdate的区别:

 


未完,待续.....

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值