hibernet的缓存和级联

来源:互联网 发布:域名微信分享防封技术 编辑:程序博客网 时间:2024/06/05 01:56
 
[java] view plaincopyprint?
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
  4. <!--  
  5.     Mapping file autogenerated by MyEclipse - Hibernate Tools 
  6. --> 
  7. <hibernate-mapping> 
  8.     <class name="hibernate.bean.PxDept" table="px_dept" schema="dbo" 
  9.         catalog="test"
Java代码 复制代码
  1.         <cache region="read-write"/>  
  2.          <id name="deptId" type="integer">  
  3.             <column name="dept_id" />  
  4.             <generator class="identity" />  
  5.         </id>  
  6.         <many-to-one name="pxDept"class="hibernate.bean.PxDept" 
  7.             insert="false" update="false">  
  8.             <column name="parent_id" />  
  9.         </many-to-one>  
  10.         <property name="parentDeptId" type="integer">  
  11.             <column name="parent_id" />  
  12.         </property>  
  13.         <property name="deptName" type="string" >  
  14.             <column name="dept_name" length="256" not-null="true" />  
  15.         </property>  
  16. <set name="pxEmployees" inverse="true"  cascade="delete" batch-size="8" lazy="true">  
  17.             <cache usage="read-write"/>  
  18.             <key>  
  19.                 <column name="dept_id" not-null="true" />  
  20.             </key>  
  21.             <one-to-many class="hibernate.bean.PxEmployee" />  
  22.         </set>  
  23.     </class>  
  24. </hibernate-mapping>  
  25. 我使用以下查询: 
[java] view plaincopyprint?
  1.         <cache region="read-write"/> 
  2.          <id name="deptId" type="integer"
  3.             <column name="dept_id" /> 
  4.             <generator class="identity" /> 
  5.         </id> 
  6.         <many-to-one name="pxDept" class="hibernate.bean.PxDept" 
  7.             insert="false" update="false"
  8.             <column name="parent_id" /> 
  9.         </many-to-one> 
  10.         <property name="parentDeptId" type="integer"
  11.             <column name="parent_id" /> 
  12.         </property> 
  13.         <property name="deptName" type="string"
  14.             <column name="dept_name" length="256" not-null="true" /> 
  15.         </property> 
  16. <set name="pxEmployees" inverse="true"  cascade="delete" batch-size="8" lazy="true"
  17.             <cache usage="read-write"/> 
  18.             <key> 
  19.                 <column name="dept_id" not-null="true" /> 
  20.             </key> 
  21.             <one-to-many class="hibernate.bean.PxEmployee" /> 
  22.         </set> 
  23.     </class
  24. </hibernate-mapping> 
  25. 我使用以下查询: 
Java代码 复制代码
  1. (1)List list = session.createQuery("from PxDept as p1 left join fetch p1.pxEmployees").setCacheable(true).list(); 
[java] view plaincopyprint?
  1. (1)List list = session.createQuery("from PxDept as p1 left join fetch p1.pxEmployees").setCacheable(true).list(); 
Java代码 复制代码
  1. (2)list = session.createQuery("from PxDept as p1 left join fetch p1.pxEmployees").setCacheable(true).list(); 
[java] view plaincopyprint?
  1. (2)list = session.createQuery("from PxDept as p1 left join fetch p1.pxEmployees").setCacheable(true).list(); 
Java代码 复制代码
  1. 在(2)中的list结果是从缓存中取的,但里边PxDept对象中的关联对象pxEmployees集合是空的 
[java] view plaincopyprint?
  1. 在(2)中的list结果是从缓存中取的,但里边PxDept对象中的关联对象pxEmployees集合是空的 
Java代码 复制代码
  1. 下面我面又另一种方式: 
[java] view plaincopyprint?
  1. 下面我面又另一种方式: 
Java代码 复制代码
  1. 将PxDept.hbm.xml中的关联关系改下 
[java] view plaincopyprint?
  1. 将PxDept.hbm.xml中的关联关系改下 
Java代码 复制代码
  1. <set name="pxEmployees" inverse="true"  cascade="delete" batch-size="8" lazy="false">  
  2.             <cache usage="read-write"/>  
  3.             <key>  
  4.                 <column name="dept_id" not-null="true" />  
  5.             </key>  
  6.             <one-to-many class="hibernate.bean.PxEmployee" />  
  7.         </set> 
[java] view plaincopyprint?
  1. <set name="pxEmployees" inverse="true"  cascade="delete" batch-size="8" lazy="false"
  2.             <cache usage="read-write"/> 
  3.             <key> 
  4.                 <column name="dept_id" not-null="true" /> 
  5.             </key> 
  6.             <one-to-many class="hibernate.bean.PxEmployee" /> 
  7.         </set> 
Java代码 复制代码
  1. lazy="false" 
[java] view plaincopyprint?
  1. lazy="false" 
Java代码 复制代码
  1. <PRE class=java name="code">(1)List list = session.createQuery("from PxDept as p1 left join fetch p1.pxEmployees").setCacheable(true).list();</PRE>  
  2. <PRE class=java name="code">(2)list = session.createQuery("from PxDept as p1 left join fetch p1.pxEmployees").setCacheable(true).list();</PRE>  
  3. <PRE class=java name="code">这会在(2)中的list 中的pxDept中的pxEmployees集合就有数据了,请问 这什么怎么回事???  
  4. </PRE>