getHibernateTemplate.load() 和get()之间的区别
主要的地方
getHibernateTemplate.load()
存在延迟加载问题。
getHibernateTemplate.get()
不存在此问题,她是不采用lazy机制的。
- 当记录不存在时候,
get
方法返回null
,load
方法产生异常。即get()
可以取空的数据集,但load()
不行。 take a look at the Hibernate documentation (though I agree is not very explicit)--the HibernateTemplate is basically a wrapper around the native Hibernate API.
get()
将返回null
如果对象未找到,而load()
总是返回一个非空的对象,这是一个代理。如果底层对象不存在,代理将抛出ObjectNotFoundException
。load()
应该在确定对象存在时使用,而get()
在不确定时使用。
load()
方法可以返回实体的代理类,而get()
方法则返回真实的实体类。load()
可以充分利用 Hibernate 的内部缓存和二级缓存中的现有数据,而get()
仅仅在内部缓存中进行数据查找。如果没有发现数据,则会越过二级缓存,直接调用 SQL 查询数据库。也许别人把数据库中的数据修改了,
load()
在缓存中找到了数据,则不会再访问数据库,而get
则会返回最新数据。