HIbernate Lazy 常用配置

Lazy:延迟加载,在真正使用某个对象的时候才正真的去创建,即hibernate才会正真的发出sql语句去加载该对象

Lazy的有效期:只有在session打开的时候才有效;session关闭后lazy就没效了。

lazy策略可以用在:

1、 <class>标签上:可以取值true/false

* <property>标签上,可以取值true/false,这个特性需要类增强(不常用)

* 设置<class>标签中的lazy="true",或是保持默认(即不配置lazy属性)

* 如果lazy的属性值为true,那么在使用load方法加载数据时,只有确实用到数据的时候才会发出sql语句;这样有可能减少系统的开销。

注:<class>上的lazy只影响普通属性

2、集合(collection)的延迟加载,主要应用在<set>/<list>等集合上:可以取值true,false,extra  (常用extra,比较智能)

* true:默认取值,它的意思是只有在调用这个集合获取里面的元素对象时,才发出查询语句,加载其集合元素的数据。

*false:取消延时加载特性,即在加载对象的同时,就发出第二条查询语句加载其关联集合的数据

*extra:一种比较聪明的懒加载策略,即调用集合的size/contains等方法的时候,hibernate并不会去加载整个集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据

3、单端关联延迟加载策略, 配置在<one-to-one>/<many-to-one>等标签上,可以取值false/proxy/no-proxy 

*false:取消迟加加载策略,即在加载对象的同时,发出查询语句,加载其关联对象

*proxy(默认):这是hibernate对单端关联的默认懒加载策略,即只有在调用到其关联对象的方法的时候才真正发出查询语句查询其对象数据,其关联对象是代理类

*no-proxy:这种懒加载特性需要对类进行增强,使用no-proxy,其关联对象不是代理类

注:

1、load默认会开启延迟加载,而get不支持延迟加载。

2、当查询特定的数据库中不存在的数据时,get会返回null,而load则抛出异常。

延迟加载是一个非常有用的策略,但是有时候也会影响性能,例如:如果我们确定某个对象的关联对象会被使用,干脆一次都加载上来,比延迟加载性能要好些。总之使用lazy要根据实际需求,这也是为什么hibernate设置lazy有不同属性的原因。

时间: 2024-10-08 09:12:49

HIbernate Lazy 常用配置的相关文章

hibernate的常用配置

hibernate.cfg.xml的一些相关配置 <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <!-- 通常,一个ses

初识Hibernate的主配置和映射配置

Hibernate.cfg.xml 主配置 Hibernate.cfg.xml 主配置文件夹中主要配置:数据库链接配置,其他参数配置,映射信息等. 常用配置查看源码: hibernate-distribution-3.6.0.Final\project\etc\hibernate.properties session-factory 节点: 一般来说一个数据库对应着一个session-factory节点. 1.数据库链接配置:(以mysql为例子)       hibernate.propert

SpringMVC+Apache Shiro+JPA(hibernate)整合配置

序: 关于标题: 说是教学,实在愧不敢当,但苦与本人文笔有限,实在找不到更合理,谦逊的词语表达,只能先这样定义了. 其实最真实的想法,只是希望这个关键词能让更多的人浏览到这篇文章,也算是对于自己写文章的一个肯定吧.^_^! 关于内容: 再写这系列文章之前,本人和许多人一样都是伸手党,并深深的了解咱伸手党且英文较差的朋友对于新知识的学习及获取中文资料少的痛苦.所以本着"取之于民,共享与民"的原则,记录下实际工作中对SpringMVC+Shiro整合应用的部分心得.本人技术水平有限,仅希望

c3p0的常用配置方式

1:第一种方式非常简单 c3p0.driverClass=com.mysql.jdbc.Driver c3p0.jdbcUrl=jdbc:mysql://localhost:3308/database c3p0.user=root c3p0.password=root 文件名字为:c3p0.properties(放在src目录下面) //程序我写的比较简单,可以用来测试执行配置. package jdbc.mysql; import java.sql.Connection; import jav

Mingyang.net:hibernate.hbm2ddl.auto配置详解【转】

原文地址:http://www.cnblogs.com/feilong3540717/archive/2011/12/19/2293038.html hibernate.cfg.xml 中hibernate.hbm2ddl.auto配置节点如下: <properties> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.

hibernate lazy和fetch属性介绍

lazy延迟加载 lazy(延迟加载)策略可用于<class>标签,<property>标签,集合(<set>/<list>)标签以及<one-to-one>/<many-to-one>标签上 <class> class标签中的lazy可选属性为true/false,默认为ture,代表默认使用延迟加载策略 1 public static void main(String[] args) { 2 Session sessi

[JavaEE] Hibernate连接池配置测试

转载自51CTO http://developer.51cto.com/art/200906/129914.htm Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP.在Hibernate连接池配置时需要注意的有三点: 一.Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池存在缺陷.如果你因为某种原因需要在Hibernate3中使用DBCP,建议采用JNDI方式. 二.默认情况下(即没

Hibernate中用注解配置一对多双向关联和多对一单向关联

Hibernate中用注解配置一对多双向关联和多对一单向关联 Hibernate提供了Hibernate Annotations扩展包,使用注解完成映射.在Hibernate3.3之前,需单独下载注解开发包 配置持久化类 配置关联关系 下面我们先从多对一单向关联关系讲起,多对一单向关联就是在多的一方植入一的一方的主键作为外键,下面我们先进行初始配置, 在配置的过程中我们会遇到一个问题  就是无论用load还是get都不会出现延迟加载,那么我们应该如何设置为要延迟加载,这样做的好处是可以在用的时候

hibernate进阶--一对多映射配置

hibernate作为一款优秀的ORM框架,广受大家喜爱,也被Java社区公认为持久层的首选.虽然jdbc为Java数据库操 作带来了诸多便利,但是并没有统一SQL语句的写法,而且具体操作数据库的代码也足够复杂,且存在大量重复.所以有了ORM框架,让Java程序员可以从 SQL语句中解放,Hibernate就是其中的翘楚.Hibernate将JDBC进一步的封装了,在SQL的可移植性方面表现优秀,并且使 Hibernate程序代码足够简化. ORM(对象关系映射)是面向对象程序员在代码的编写过程