hibernate 中的 get 和 load 的区别

jspxnet 贵州国际电子商务中心技术部 经理  2004-12-22 03:38:29
我测试了一下hibernate 中 get 和 load 的区别,有的地方不太明白。

设 cat 表中没有 ID为1111的数据.

session.get(cat.class, "1111"); //得到null对象

session.load(cat.class,"1111"); //得到的不是空对象,如果你一处理,就包错

get 和 load 在处理上有什么不同,缓存管理上有什么不同.
...全文
126 点赞 收藏 10
写回复
10 条回复
catblue 2004年12月27日
同意
回复 点赞
kaymo 2004年12月23日
没考虑这个问题
一般就拿着load上
赫赫

gz
回复 点赞
jspxnet 2004年12月23日
一般都用 load() ,load 比 get 好在那,就是使用的时候,才查询???

回复 点赞
programeyonger 2004年12月23日
好象一般都用的是load()啊!
回复 点赞
IceCraft 2004年12月23日
两者各有利弊,根据需要取舍吧。
get是直接查询数据库,如果查不到就返回null,并不存在如楼上说的隐患吧?
Load会首先从内存中装载,如果以前没有装载或查询出来,才开始查询数据库,某些情况下效率会高一点。但如果类是通过代理映射的,load()方法会返回一个对象,这是一个未初始化的代理,并且直到你调用该对象的某方法时才会去访问数据库,如果数据库中并不存在这条数据,而你去使用它的方法必然会抛出异常,所以你得在使用到这个对象的各处捕获异常,使用起来相对麻烦。但这是使用了代理的情况,如果没有使用代理,只是简单的load,那查不到数据就会抛出异常了。
回复 点赞
bluemeteor 2004年12月23日
btw:我这的2.1.7...不知道在3里面load和get在CACHE方面是否存在不同
回复 点赞
bluemeteor 2004年12月23日
load()方法是假定你所读取的对象是肯定存在的...而get则是尝试访问..如果没有则返回null.而load就会抛出Exception cant load ...

个人认为这两个方法唯一的区别就是为了实现不同的业务需要...从src上看性能是一样的
回复 点赞
totodo 2004年12月23日
将起来很麻烦,但实际上load()好..

load是必须要把对象找到,,如果找不到就会报错.

但get不一样,get找不就就算了..我是去get嘛,,所以它找不到返回为null 不会报错.(但隐患很大.)



执行效率上是一样的...所以一般都用load() 也是有道理的
回复 点赞
noscar 2004年12月22日
get(),好象是数据库里不一定有的。而load()一定是数据库里有的....
回复 点赞
jspxnet 2004年12月22日
我用的是 hibernate3 beta1
回复 点赞
发动态
发帖子
Java EE
创建于2007-09-28

3.7w+

社区成员

22.5w+

社区内容

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区公告
暂无公告