1.get()和load()方法均是根据id查询数据库,并返回对应的实体对象,区别在于
①Session.get()方法,在加载后立即执行,不支持懒加载。
Session.load()方法,在加载后不会立即执行,只有用到的时候才执行。
②如果未能发现要查询的记录,则Session.get()返回NULL,而Session.load()方法抛出ObjectNotFoundException。
③Session.get()方法永远直接返回实体类,而Session.load()方法可返回实体类的代理类实例。
④Session.get()方法仅在内部缓存(Session管理的一级缓存)数据中进行查找,如果没有找到,将越过二级缓存,直接查询数据库。
Session.load()方法充分利用内部缓存和二级缓存,如果都没有将查询数据库。
注:在Hibernate3版本中,get()方法也会查询二级缓存。
2.什么时候用get(),什么时候用load()?
如果确定该数据在数据库中一定存在,可以放心使用代理来进行加载,则可用load()。