我对这两种方法有基本的了解,但我对Load()方法几乎没有顾虑: 1.如果class是final或者没有提供默认构造函数,那么在这种情况下,load将始终命中数据库或抛出错误,因为它无法创建代理类? 2.如果在第一级或第二级缓存中找到对象,它将返回完整对象或代理对象吗?
对于Get方法 1.如果在缓存中找到对象,它将无法访问数据库?
答案 0 :(得分:1)
根据我的理解,
加载会点击缓存,获取也会尝试点击缓存。
如果加载获取缓存中的对象,则返回if not, it returns just a proxy object with the given identifier set
。
如果获取,则从其返回的缓存中获取对象if not, it goes to DB and returns the found object, if not present returns null
。
如果加载,如果返回代理对象,则在保存/更新对象时抛出org.hibernate.ObjectNotFoundException
,此时查询对象的标识符不存在于数据库中。 / p>
因此,当您确定在数据库中具有针对查询标识符的对象时,基本上使用Load
,它的使用应该是我们只需要更新一些属性的地方。