1.Hibernate的工作原理
·解析并读取hibernate的配置文件
·解析并读取hibernate的映射文件,并创建sessionFactory
·打开session
·开启事物
·执行持久化操作
·提交事物
·关闭session
·关闭sessionFactory
2.Hibernate对象的三种状态,以及如何转换
·瞬时状态、持久化状态、游离状态
·瞬时状态:程序中new出来的对象为瞬时状态,此时对象未保存到数据库中,且不受session管理;
·持久化状态:存在数据库中且受session管理的对象;
·游离状态:当session关闭后,存在于内存中的对象不受session管理,那么就是游离状态;
·相互转换:
瞬时状态--->持久化操作save()--->持久化状态
·持久化状态--->session关闭后,缓存中的对象就是游离状态了
·游离状态---->update(),又变为持久化状态
·持久化状态---->delete(),又变成瞬时状态
3.Hibernate如何管理缓存
·hibernate有一级(session)、二级(sessionFactory)缓存;
·一级缓存由hibernate管理,一般情况下不需干预;
·二级缓存属于进程范围内的缓存,这一级别的缓存可以进行配置和更改,可以动态加载和卸载;(EhCache)
4.使用hibernate的优点
·hibernate是一个orm持久化框架,对jdbc的操作进行了很好的封装,提高了代码的复用性,且同时是一个轻巧灵活的轻量级框架
5.hibernate是如何延迟加载的
·hibernate2可以对对象与集合进行延迟加载;
·hibernate3可以对属性进行延迟加载;
·当hibernate在查询数据的时候,数据并没有存在内存中,只有当查询的数据真正被调用的时候,数据才会存在于内存中,这就实现了延迟加载;
·通常在需要延迟加载的对象或者属性集合上添加lazy属性,或者通过session.load(User.class, 1)这种方式使用延迟加载;
6.hibernate如何实现类之间的关系
·通过在映射文件中设置many-to-one|one-to-many|many-to-many
7.update于saveOrUpdate区别
·update操作的对象必须是持久化的对象,如果该对象不存在于数据库中,就无法使用updae方法;
·saveOrUpdate操作的对象可以是持久化也可以是非持久化的,对象存在于数据库中就调用update,否则调用save;
8.hibernate的get与load
·get与load都可以通过id查询到对象
·get是立即加载,load是延迟加载;
9.hibernate的检索策略
·立即检索、延迟检索、左外连接检索
·立即检索:lazy = false
优点:对程序完全透明,处于任何状态的对象很方便的导航到关联对象
缺点:select语句过多,可能会加载不需要的数据浪费内存
·延迟检索:lazy = true
优点:由程序决定加载的对象,避免过多的select语句,不会加载不需要的数据,照成内存浪费
缺点:对程序不透明,在session关闭后就无法访问对象了
·左外连接检索:fetch = join
优点:对应用程序完全透明,处于任何状态的对象导航到其他对象都很方便,减少了select语句
缺点:可能会加载不需要的对象浪费内存;
10.hibernate支持哪些缓存策略
·usage有4种缓存策略:
1.放入二级缓存的对象,只读read-only
2.非严格的读写:nonstrict read/write
3.放入二级缓存的对象,读写read/write
4.基于事务的策略