zoukankan      html  css  js  c++  java
  • lazy

    lazy概念:只有真正使用该对象时,才会创建。对于hibernate而言,真正使用时才会发出SQL

    Hibernate3.x,lazy默认是打开的

    Hibernate Lazy策略使用:
    <class>标签,可以取值true/false
    <property>标签,可以取值true/false
    <set><list>标签,可以取值true/false/extra
    <one-to-one> <many-to-one>单端关联,可以取值:false/proxy/noproxy

    load支持lazy,get不支持。

    ====================
    class标签
    ====================
    <class name="className" lazy="true/alse">
    默认为true

    class上的Lazy,只对普通属性起作用,对集合和<one-to-one> <many-to-one>不起作用
    即:如果一个类里有Set集合成员变量和需要用<one-to-one> <many-to-one>来映射的成员变量,即使在class里设置lazy为false,他们在使用之前也不会加载。需要单独设置lazy,也就是lazy的另外两个用法。

    如果在使用load加载了某个对象,但是没有使用,即没有发出SQL语句,就把session给关了,此时,如果再使用这个对象就会抛出LazyInitalizationException。因为对象并没有加载上来,因为使用了lazy策略,只是加载了类的一个代理子类。

    ====================
    集合
    ====================

    <set name="name" lazy="true/false/extra" >
    默认为true

    默认为true情况下,只要使用到了Set对象,就会把整个set全部查询出来。

    false情况下,不使用Lazy,查询Lazy所属的对象时,set就会被查询上来。需要类增强工具。

    extra情况下,比较智能,根据查询的内容,生成不同的SQL语句。效率会高一些。

    ====================
    单端关联
    ====================

    <many-to-one name="name" lazy="false/proxy/noproxy">
    默认为proxy

    false:不使用Lazy。

    noproxy:需要类增强工具

    ====================
    property
    ====================
    <property name="name" lazy="true/false"/>
    默认false

    true:较少使用,如果某个字段是内容量比较大,可以设置为true,在真正使用的时候再加载。可以提高效率。

  • 相关阅读:
    如何在CentOS系统中安装字体 51CTO.COM
    C++检查输入数据类型? 知乎
    义乌市爱因宝母婴用品有限公司_公司简介
    硬盘对拷必备 AGE USB/eSATA对拷机现卖场!_青岛行情中关村在线
    Download: Microsoft SQL Server Management Studio Express Microsoft Download Center Download Details
    今晚看啥
    nano接收器
    12306订票助手 (版本 3.5.0)
    Microsoft® SQL Server® 2008 Management Studio Express
    有线键盘和鼠标确实应该退出历史舞台了
  • 原文地址:https://www.cnblogs.com/jinzhengquan/p/1958593.html
Copyright © 2011-2022 走看看