hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别

 我来答
guanmi529
2011-06-07 · TA获得超过159个赞
知道小有建树答主
回答量:122
采纳率:0%
帮助的人:0
展开全部
saveorupdate()如果传入的对象在数据库中有就做update操作,如果没有就做save操作。
save()在数据库中生成一条记录,如果数据库中有,会报错说有重复的记录。

hibernate中get方法和load方法的根本区别
如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来延迟加载该对象。在用到对象中的其他属性数据时才查询数据库,但是万一数据库中不存在该记录,那没办法,只能抛异常ObjectNotFoundException,所说的load方法抛异常是指在使用该对象的数据时,数据库中不存在该数据时抛异常,而不是在创建这个对象时。由于session中的缓存对于hibernate来说是个相当廉价的资源,所以在load时会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理。所以如果你知道该id在数据库中一定有对应记录存在就可以使用load方法来实现延迟加载。
对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。

虽然好多书中都这么说:“get()永远只返回实体类”,但实际上这是不正确的,get方法如果在session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是返回的还是代理对象,只不过已经加载了实体数据。

前面已经讲了,get方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;反而load方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库。

总之对于get和load的根本区别,一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,就抛异常;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。
你如果要深入了解。你可以看下这本书(深入浅出hibernate)它讲的比较仔细。
涟漪海洋
2015-09-09 · TA获得超过236个赞
知道小有建树答主
回答量:242
采纳率:100%
帮助的人:200万
展开全部
update是更新一个对象
saveOrupdate是根据实体判断,如果没有的话就保存实体,如果有实体的话才修改
session中的get是根据唯一标识,看看一级缓存中有没有
有的话 直接拿出来,没有的话才进行查询
load是直接进行查询
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
朝霞之光
2011-06-07 · TA获得超过135个赞
知道答主
回答量:175
采纳率:0%
帮助的人:58.7万
展开全部
update针对的是已存在的实体对象
saveOrUpdate()对象存在与否都不会有任何影响
追问
这个我知道,我要的是后者的答案
追答
session的load()和get()的区别
load是只在缓存中加载数据
get是先缓存中查找或者缓存中没有到数据库中查找
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
洒下了句点KEY
2013-02-27
知道答主
回答量:3
采纳率:100%
帮助的人:1.9万
展开全部
load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,load默认支持延迟加载,在用到对象中的其他属性数据时才查询数据库,但是万一数据库中不存在该记录,只能抛异常ObjectNotFoundEcception;所说的load方法抛异常是指在使用该对象的数据时,数据库中不存在该数据时抛异常,而不是在创建这个对象时。由于session中的缓存对于hibernate来说是个相当廉价的资源,所以在 load时会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理(load时候之查询一级缓存,不存在则创建代理)。
get() 现在一级缓存找,没有就去二级缓存找,没有就去数据库找,没有就返回null;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式