关于Hibernate的load和get方法的区别,网上一抓一大片。不过,也许是版本的不同,感觉网上的文章有其谬误。况且,说两者区别的文章一大片,但几近没有文章谈及何时使用这两方法合适。
网上流传较广的说法之一是:load比get效率高。理由是:load比较聪明,会先从1、2级缓存中找数据,找不到再从数据库中查询;而get则是个笨蛋,不管三七二十一,直接查数据库。
也许老版本是这样,实际上,我用Hibernate3.6测试发现,get也会从缓存中找数据。所以,在查询方面,我认为两者间的效率并无甚差异——想想也该明白,如果load真比get全方位的优胜,那get还有存在的意义么?早就被Hibernate开发组的人淘汰了。
那么,load和get到底有什么区别——或者说,他们各自应用在什么地方?
我觉得,他们俩之间的关系就像是单例模式中的懒汉式和饿汉式——如果要取的数据不多,并且确定一定会用到,那么直接拿过来就好;反过来,如果要查的数据不一定被用到,而且数据量较大,耗费资源较多,那我们就应该使用load延迟加载,即在真正要用的时候再来查询数据。
网上的文章大多都列了好多load和get的不同之处的条目,这里就不再赘述了——优秀的程序员从不干重复低价值的劳动,嘿嘿。
来源:oschina
链接:https://my.oschina.net/u/1379006/blog/190094