`
webcode
  • 浏览: 5947177 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

hibernate lazy——延迟加载

 
阅读更多
hibernate lazy策略可以使用在:
* <class>标签上,可以取值:true/false ,在hibernate3以上版本,默认是true
* <property>标签上,可以取值:true/false 需要类增强工具
* <set><list>标签上,可以取值:true/false/extra
* <one-to-one><many-to-one>单端关联上,可以取值:false/proxy/no-proxy

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

hibernate支持lazy策略只有在session打开状态下有效



1 <class>标签上:


group.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.model">
<wbr><wbr><wbr><span style="color:#ed1c24; font-weight:bold">&lt;class name="Group" table="group5" lazy="true" &gt; //lazy,默认true,可不写</span><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;id name="id" column="id" type="java.lang.Integer"&gt;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;generator class="native" /&gt;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;/id&gt;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;property name="name" column="name" length="50" type="java.lang.String" /&gt;<br><wbr><wbr><wbr> &lt;/class&gt;<br> &lt;/hibernate-mapping&gt;<br><br><span style="font-weight:bold">测试用例:</span><br><br> public class LazyTest extends TestCase<br><br> {<br><br> public void testLoad1(){<br><wbr><wbr> Session session = null;<br><wbr><wbr> Transaction ta = null;<br><wbr><wbr> try{<br><wbr><wbr><wbr> session = HibernateUtil.getSession();<br><wbr><wbr><wbr> ta = session.beginTransaction();<br><br><wbr><wbr><wbr> //还没发出sql,lazy起延迟作用,若lazy=false,则发出sql<br><br><wbr><wbr><wbr> Group g2 = (Group) session.load(Group.class, 1);<br><wbr><wbr><wbr> Group g3 = (Group) session.get(Group.class, 1);<wbr><wbr> //不支持lazy<br><wbr><wbr><wbr> System.out.println("group.id=" + g2.getId());<wbr><wbr><wbr><wbr> //还没发出sql,<br><wbr><wbr><wbr> System.out.println("group.name=" + g2.getName()); //发出sql<br><wbr><wbr><wbr> ta.commit();<br><wbr><wbr> }catch(Exception e){<br><wbr><wbr><wbr> e.printStackTrace();<br><wbr><wbr><wbr> if(ta != null){<br><wbr><wbr><wbr><wbr> ta.rollback();<br><wbr><wbr><wbr> }<br><wbr><wbr> }finally{<br><wbr><wbr><wbr> //关闭session, user变为detached离线对象<br><wbr><wbr><wbr> HibernateUtil.closeSession(session);<br><wbr><wbr> }<br><wbr><wbr> // System.out.println("group.name=" + g2.getName());<br><wbr><wbr> // <span style="font-weight:bold"><span style="color:#ed1c24">hibernate支持lazy策略只有在session打开状态下有效,所以此出Exception</span></span><br> }<br><br> }<br><br style="color:rgb(237,28,36); font-weight:bold"><span style="color:#ed1c24; font-weight:bold">&lt;class&gt;标签上的lazy特性只对普通属性起作用</span><br style="color:rgb(237,28,36); font-weight:bold"><br style="color:rgb(237,28,36); font-weight:bold"><span style="color:#ed1c24; font-weight:bold">&lt;class&gt;标签上的lazy不会影响到单端关联上的lazy特性</span><br><br><br><br><br><span style="color:#ed1c24; font-weight:bold">2.&lt;set&gt;&lt;list&gt;标签上,可以取值:true/false/extra,默认是true</span><br><br><span style="font-weight:bold">Classes.hbm.xml</span><br><br> &lt;?xml version="1.0" encoding="utf-8"?&gt;<br> &lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br> "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;<br> &lt;hibernate-mapping package="com.zd.model"&gt;<br><wbr><wbr><wbr> &lt;class name="Classes" table="classes" &gt;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;id name="id" column="id" type="java.lang.Integer"&gt;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;generator class="native" /&gt;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;/id&gt;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;property name="name" column="name" type="java.lang.String" /&gt;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="color:#ed1c24; font-weight:bold"> &lt;set name="students" lazy="true"&gt;</span> <span style="color:#ed1c24; font-weight:bold"> //可不配lazy,因默认是true</span><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;key column="class_id" /&gt;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;one-to-many class="com.zd.model.Student" /&gt;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;/set&gt;<br><wbr><wbr><wbr> &lt;/class&gt;<br><br> &lt;/hibernate-mapping&gt;<br><br> 测试用例:<br><br> public void testLoad1(){<br><wbr><wbr> Session session = null;<br><wbr><wbr> Transaction ta = null;<br><wbr><wbr> try{<br><wbr><wbr><wbr> session = HibernateUtil.getSession();<br><wbr><wbr><wbr> ta = session.beginTransaction();<br><wbr><wbr><wbr> Classes c = (Classes) session.load(Classes.class, new Integer(2));<wbr> //没有sql<br><wbr><wbr><wbr> System.out.println("Class.name=" + c.getName());<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> //发出一条sql,但不查 set<br><wbr><wbr><wbr> Set stuSet = c.getStudents();<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics