论坛首页 Java企业应用论坛

hibenate的面试总结

浏览 15269 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-03-06   最后修改:2010-03-06
我在Hibernate 3.3.2.GA里面做了测试,get, load都会访问二级缓存的,不同的地方在于:
get加载对象的顺序是session cache-->second level cache-->db, 找不到返回null
load则是先返回proxy, 程序调用对象的非ID属性时,再触发session cache-->second level cache-->db的查找,找不到抛ObjectNotFoundException
1 请登录后投票
   发表时间:2010-03-06  
关于get, load以及二级缓存的问题,网上很多转贴,大多都是针对Hibernate2.x, 3.x版本好像有不少变化,对于这些细微差别,LZ写几个单元测试实践一下就很清楚了,以下是我之前写的测试,可以做为参考
http://septem.iteye.com/blog/608822
http://septem.iteye.com/blog/575130
0 请登录后投票
   发表时间:2010-03-06   最后修改:2010-03-06
http://blog.chinaunix.net/u/1096/showart_252658.html
0 请登录后投票
   发表时间:2010-03-06  
hantsy 写道

能从源码的角度分析再好不过了
还是第一次看到void load(Object object , Serializable id)这个方法,学习了
0 请登录后投票
   发表时间:2010-03-10  
对新手来说 这些还是很有价值的 看看缓存了
0 请登录后投票
   发表时间:2010-03-10  
lucky16 写道
YiSingQ 写道
icyiwh 写道
不错,但是get()方法每次从数据库取吗? 应该先从session中取吧,取到了就不数据库了吧

get先从Session缓存找,找不到再从数据库取。

就是, get()也会先在缓存里面找一下的,如果没有再发SQL查询,但是至于会不会在二级缓存中查询,我就真的是忘了,主要是也没有怎么使用get()了一般都是用load()的多!



get() 和 find() 都不好读缓存的,都是直接从数据库读取
0 请登录后投票
   发表时间:2010-03-18  
icyiwh 写道
不错,但是get()方法每次从数据库取吗? 应该先从session中取吧,取到了就不数据库了吧

正确
0 请登录后投票
   发表时间:2010-03-22  
get直接从数据库中找不经过缓存 ,load加载的一个代理对象,也就是这个对象只有ID 属性才有值,
0 请登录后投票
   发表时间:2010-03-22  
load 和update都是对托管对象的重附。用法如楼主说地。。
不过合并还有个merge吧。。忘记了
0 请登录后投票
   发表时间:2010-03-25  
get()会先从缓存中读吧
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics