日期:2014-05-20  浏览次数:20613 次

请教大虾们Hibernate many-to-one的Lazy设置的问题..在线等!!
看了hibernate的帮助文档,要实现many-to-one的lazy加载,什么都不设置应该就可以了.
(lazy default 是proxy)
我现在的配置:
<class 
  name="MzUserTerritoryMst" 
  table="MZ_USER_TERRITORY_MST"
  lazy="true"
>
 <property>
  ...
 </property>
  <!-- union-directional many-to-one association to MzTerritoryMst -->
  <many-to-one 
  name="mzTerritory"
  class="MzTerritoryMst" 
  insert="false" 
  update="false" 
  not-found="ignore" 
lazy="proxy"
  foreign-key="none"
  >
  <column name="SYS_OWNER_CD"/>
  <column name="TERRITORY_CD"/>
  </many-to-one>
</class>
<class 
  name="MzTerritoryMst" 
  table="MZ_TERRITORY_MST"
  lazy="true"
>
 <property>
  ...
 </property>
</class>
not-found="ignore"这么设置之后..lazy就无效了..如果not-found不设置..lazy就有生效..





------解决方案--------------------
Hibernate的many-to-one的元素的一个属性:not-found
用来指定引用的外键不存在时将如何处理:
exception(默认)抛出异常
ignore 忽略

------解决方案--------------------
hibernate中默认就是lazy的,并不需要设置。
------解决方案--------------------
lazy默认为true,即延迟加载,查询与更新必须在一个Session中,Session不能关闭。
lazy为false,即立即加载,查询同时查询出与其相关的数据。
------解决方案--------------------
这是一个延迟加载的问题 默认是lazy是true,也就是懒惰的,查只查属性本身,你要查的是关联属性,把lazy改为false是不可取的,因为这样不安全,每次查的时候都会把属性以及属性相关联的都给查出来。
解决方法:
1,查询的list,在循环一次,把原先查的值给覆盖掉,用关联属性去填充。添加到list中,保存至作用域,在调用。
2.用Criteria查询,具体语法自己查相关资料


一般1方法可以解决......


不足之处,还望高手补充........