编程资料集中营
 | 网站首页 | 文章中心 | 编程资料2 | 软件下载 | BT下载 | 八卦星闻 | 音乐在线 | 在线游戏 | 免费电影 | 进入问吧 | 
Hibernate get()和load() 的区别?,发布者:发布时间:2007-01-21gmarwaha在他的blog里,提到Hibernateget()和load()的区别,同时通过例子表明了load()能带来的性能提升.考虑如下的一个拍卖应用的例子:拍卖物件对象:Item拍卖行为:BidSessionsession=<<GetsessionfromSessionFactory>>LongitemId=<<G,
您现在的位置: 编程资料,学习资料,c,c++,vc,vc++,java,jsp,j2ee,j2me,asp,php >> 文章中心 >> JAVA 专区 >> Hibernate 技术 >> 文章正文
【字体:
Hibernate get()和load() 的区别?   进入问吧

本站地址:http://www.bajiao123.com

作者:本站    文章来源:网络    点击数:    更新时间:2007-1-31    

Hibernate get()和load() 的区别?

     发布者: 发布时间:2007-01-21 gmarwaha在他的blog里, 提到Hibernate get()和load() 的区别, 同时通过例子表明了load() 能带来的性能提升.

考虑如下的一个拍卖应用的例子:

拍卖物件对象: Item

拍卖行为: Bid

Session session = << Get session from SessionFactory >>
Long itemId = << Get the item id from request >>
Item item = (Item) session.get(Item.class, itemId);
if(item != null) {  
Bid bid = new Bid();  
bid.setItem(item);  
session.saveOrUpdate(bid);
}
else
{  
log.error("Bid placed for an unavailable item");  
// Handle the error condition appropriately
}


这种代码虽然可行,但是有局限性, 可以通过以下方法改进:

Session session = << Get session from SessionFactory >>
Long itemId = << Get the item id from request >>
try{  
Item item = session.load(Item.class, itemId);  
Bid bid = new Bid();  
bid.setItem(item);  
session.saveOrUpdate(bid);
}
catch(ObjectNotFoundException e) {  
log.error("Bid placed for an unavailable item");  
// Handle the error condition appropriately
}


在这个例子里, 通过load()来查询Item, 如果没有找到, 则会抛出ObjectNotFoundException 而不是返回null,  这使得处理代码更加的优雅.

Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。其区别在于:

如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。
load()方法可返回实体的代理类实例,而get方法永远直接返回实体类。
load方法可以充分利用内部缓存和二级缓存中的现有数据,而get方法则仅仅在内部缓存中进行数据查找,如没有发现对应数据,将越过二级缓存,直接调用SQL完成数据读取。

而Joseph Ottinger提到: 随着Hibernate完全实现JPA, Hibernate将会通过EntityManager来提供cache, 从而使得这个使用load()的技巧略微无效? 你是如何看待呢?
(

   

进入问吧

本站地址:http://www.bajiao123.com

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 编程资料集中营