日期:2014-05-18  浏览次数:20562 次

hibernate中session接口的load()和find()方法
我初学hibernate,我想问一下各位hibernate中session接口的find()与load()方法的区别.我总认为这个两个方法都是一样,看不出什么有不同之处.

------解决方案--------------------
load()方法会先在缓存中找对象,如果找不到就会抛出异常;
find()方法也会查找缓存,如果缓存找不到则会查找数据库,如果再找不到就会返回null
------解决方案--------------------
hibernate中session.find/load方法都能通过指定实体类名和id从数据库中读取指定的记录,并且返回与之对映的实体对象。但是它们也有很大的区别 ,find()和load()方法在执行检索时的区别:

1.find()在类检索级别时总是执行立即检索而且如果检索不到相关的对象的话会返回null,load()方法则会抛出一个ObjectNotException

2.load()方法可返回一个实体代理类类型,而find()方法直接返回的是实体类对象。

3.load()方法可以充分利用内部缓存和二级缓存,而find()方法会忽略二级缓存,若内部缓存没有查询到会到数据库中去查询。


------解决方案--------------------
hibernate 3以后的版本就用get()方法取代find()这个方法了
------解决方案--------------------
hibernate中session.find/load方法都能通过指定实体类名和id从数据库中读取指定的记录,并且返回与之对映的实体对象。但是它们也有很大的区别 ,find()和load()方法在执行检索时的区别: 

1.find()在类检索级别时总是执行立即检索而且如果检索不到相关的对象的话会返回null,load()方法则会抛出一个ObjectNotException 

2.load()方法可返回一个实体代理类类型,而find()方法直接返回的是实体类对象。 

3.load()方法可以充分利用内部缓存和二级缓存,而find()方法会忽略二级缓存,若内部缓存没有查询到会到数据库中去查询。 


学习了,偶也一直不明白