锁定老帖子 主题:hibenate的面试总结
精华帖 (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 |
|
返回顶楼 | |
发表时间:2010-03-06
关于get, load以及二级缓存的问题,网上很多转贴,大多都是针对Hibernate2.x, 3.x版本好像有不少变化,对于这些细微差别,LZ写几个单元测试实践一下就很清楚了,以下是我之前写的测试,可以做为参考
http://septem.iteye.com/blog/608822 http://septem.iteye.com/blog/575130 |
|
返回顶楼 | |
发表时间:2010-03-06
最后修改:2010-03-06
|
|
返回顶楼 | |
发表时间:2010-03-06
hantsy 写道
能从源码的角度分析再好不过了 还是第一次看到void load(Object object , Serializable id)这个方法,学习了 |
|
返回顶楼 | |
发表时间:2010-03-10
对新手来说 这些还是很有价值的 看看缓存了
|
|
返回顶楼 | |
发表时间:2010-03-10
lucky16 写道 YiSingQ 写道 icyiwh 写道 不错,但是get()方法每次从数据库取吗? 应该先从session中取吧,取到了就不数据库了吧
get先从Session缓存找,找不到再从数据库取。 就是, get()也会先在缓存里面找一下的,如果没有再发SQL查询,但是至于会不会在二级缓存中查询,我就真的是忘了,主要是也没有怎么使用get()了一般都是用load()的多! get() 和 find() 都不好读缓存的,都是直接从数据库读取 |
|
返回顶楼 | |
发表时间:2010-03-18
icyiwh 写道 不错,但是get()方法每次从数据库取吗? 应该先从session中取吧,取到了就不数据库了吧
正确 |
|
返回顶楼 | |
发表时间:2010-03-22
get直接从数据库中找不经过缓存 ,load加载的一个代理对象,也就是这个对象只有ID 属性才有值,
|
|
返回顶楼 | |
发表时间:2010-03-22
load 和update都是对托管对象的重附。用法如楼主说地。。
不过合并还有个merge吧。。忘记了 |
|
返回顶楼 | |
发表时间:2010-03-25
get()会先从缓存中读吧
|
|
返回顶楼 | |