引用 :
相同点: 都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例,
不同点:
load方法: hibernate认为该id对应的对象(数据库记录)在数据库 中是一定存在的,进而使用代理来延迟加载该对象。在用到该对象中的属性数据时才查询数据库,若查不到,则抛出 ObjectNotFoundEcception 异常.load方法抛异常是指在使用该对象的数据且数据库中不存在该数据时,而不是在创建这个对象时。由于 session 中的缓存对于hibernate来说是个较廉价的资源,所以在load 时会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理。
get方法: hibernate会确认该id对应的数据是否存在,首先在session 缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。
引用 :
get()和load()之间的一个区别在于他们如何表明实例无法被找到。如果数据库中不存在包含给定标示符的行,get()就会返回null。load()方法则抛出一个
ObjectNotFoundException。由你选择喜欢的错误处理方式。
更重要的是,load()方法可能返回一个代理(proxy),一个占位符,而不是命中(hit)数据库。这个结果就是稍后你可能得到一个ObjectNotFoundException,
一旦你试图访问返回的占位符,就立即强制它初始化。(这也称作延迟加载(lazy loading))load()方法始终试图返回一个代理,如果它已经由当前的持久化上下文管理,则返回一个已经初始化的对象实例。get()方法从不返回代理,它始终命中数据库。
相同点: 都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例,
不同点:
load方法: hibernate认为该id对应的对象(数据库记录)在数据库 中是一定存在的,进而使用代理来延迟加载该对象。在用到该对象中的属性数据时才查询数据库,若查不到,则抛出 ObjectNotFoundEcception 异常.load方法抛异常是指在使用该对象的数据且数据库中不存在该数据时,而不是在创建这个对象时。由于 session 中的缓存对于hibernate来说是个较廉价的资源,所以在load 时会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理。
get方法: hibernate会确认该id对应的数据是否存在,首先在session 缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。
引用 :
get()和load()之间的一个区别在于他们如何表明实例无法被找到。如果数据库中不存在包含给定标示符的行,get()就会返回null。load()方法则抛出一个
ObjectNotFoundException。由你选择喜欢的错误处理方式。
更重要的是,load()方法可能返回一个代理(proxy),一个占位符,而不是命中(hit)数据库。这个结果就是稍后你可能得到一个ObjectNotFoundException,
一旦你试图访问返回的占位符,就立即强制它初始化。(这也称作延迟加载(lazy loading))load()方法始终试图返回一个代理,如果它已经由当前的持久化上下文管理,则返回一个已经初始化的对象实例。get()方法从不返回代理,它始终命中数据库。