hibernate Session的get和load方法区别
2008-03-14 15:54
239 查看
摘抄至http://hunteagle.javaeye.com/blog/118540
感觉比较全面和准确,摘抄部分如下:
Session的load()和get()方法使用区别:
1、当数据库不存在对应ID数据时,调用load()方法将会抛出ObjectNotFoundException异常,get()方法将返回null,我比较喜欢使用get()方法。
2、当对象.hbm.xml配置文件<class>元素的lazy属性设置为true时,调用load()方法时则返回持久对象的代理类实例,此时的代理类实例是由运行时动态生成的类,该代理类实例包括原目标对象的所有属性和方法,该代理类实例的属性除了ID不为null外,所在属性为null值,查看日志并没有Hibernate SQL输出,说明没有执行查询操作,当代理类实例通过getXXX()方法获取属性值时,Hiberante才真正执行数据库查询操作。当对象.hbm.xml配置文件<class>元素的lazy属性设置为false时,调用load()方法则是立即执行数据库并直接返回实体类,并不返回代理类。而调用get()方法时不管lazy为何值,都直接返回实体类。
3、load()和get()都会先从Session缓存中查找,如果没有找到对应的对象,则查询Hibernate二级缓存,再找不到该对象,则发送一条SQL语句查询。
感觉比较全面和准确,摘抄部分如下:
Session的load()和get()方法使用区别:
1、当数据库不存在对应ID数据时,调用load()方法将会抛出ObjectNotFoundException异常,get()方法将返回null,我比较喜欢使用get()方法。
2、当对象.hbm.xml配置文件<class>元素的lazy属性设置为true时,调用load()方法时则返回持久对象的代理类实例,此时的代理类实例是由运行时动态生成的类,该代理类实例包括原目标对象的所有属性和方法,该代理类实例的属性除了ID不为null外,所在属性为null值,查看日志并没有Hibernate SQL输出,说明没有执行查询操作,当代理类实例通过getXXX()方法获取属性值时,Hiberante才真正执行数据库查询操作。当对象.hbm.xml配置文件<class>元素的lazy属性设置为false时,调用load()方法则是立即执行数据库并直接返回实体类,并不返回代理类。而调用get()方法时不管lazy为何值,都直接返回实体类。
3、load()和get()都会先从Session缓存中查找,如果没有找到对应的对象,则查询Hibernate二级缓存,再找不到该对象,则发送一条SQL语句查询。
相关文章推荐
- Hibernate中get和load方法的区别
- Hibernate中get和load方法的区别
- Hibernate中get和load方法的区别
- Load和get方法的区别
- Load和get方法的区别
- hibernate加载持久化实例load和get方法区别
- Hibernate中get和load方法的区别以及close()、clear()、evict()
- Session的load()和get()方法使用区别?
- Hibernate中get和load方法的区别
- hibernate:get和load方法的区别
- Session的load()和get()方法使用区别:
- hibernate load与get方法的区别
- Hibernate 笔记5 load和get方法的区别
- Hibernate中get和load方法的区别
- Hibernate中get和load方法的区别
- hibernate中get和load方法的区别
- get和load方法的区别
- hibernate中get方法和load方法的区别
- Hibernate中load和get方法区别
- hibernate里load方法和get方法的区别