hibernate中Session的load和get方法的区别是什么?

时间:2021-05-30 15:56:16

主要有以下三项区别: 
① 如果没有找到符合条件的记录,get方法返回null,load方法抛出异常。 
② get方法直接返回实体类对象,load方法返回实体类对象的代理。 
③ 在Hibernate 3之前,get方法只在一级缓存中进行数据查找,如果没有找到对应的数据则越过二级缓存,直接发出SQL语句完成数据读取;load方法则可以从二级缓存中获取数据;从Hibernate 3开始,get方法不再是对二级缓存只写不读,它也是可以访问二级缓存的。

说明:对于load()方法Hibernate认为该数据在数据库中一定存在可以放心的使用代理来实现延迟加载,如果没有数据就抛出异常,而通过get()方法获取的数据可以不存在。