日期:2014-05-19  浏览次数:20670 次

急急!Hibernate3 1+N问题!求指点!
Action类方法:
[code=Java][/code]
/**
* 查询企业名称是否存在
* @return
*/
public String selectOrgByOrgName(){
try {
bo=orgZcService.selectOrgByOrgName(orgZc.getOrgName());
} catch (Exception e) {
System.out.println(e.getMessage());
LOGGER.info("企业注册Action---查询企业名称是否存在失败");
return "EXCEPTION";
}
return "selectOrgByOrgName";
}
当执行到Action类方法的return "selectOrgByOrgName";时,后台只输出一SQL语句,但return这一句一执行,就会多出N条查询子表的SQL。所以速度很慢,这是1+N问题吗?


Action类调用的DaoImpl方法:
[code=Java][/code]
/**
* 查询机构名称是否存在
* @param roleName
* @return
*/
public Boolean chickRoleNmaeIsNull(String roleName){
Boolean bo=true;
try {
String hql="select r.roleName from Role r where r.roleName=? and r.zt=0";
List<Role> list=find(hql,roleName);
if(list.size()!=0){
bo=false;
}
} catch (Exception e) {
System.out.println(e.getMessage());
LOGGER.info("组织机构接口实现类---查询机构名称是否存在失败");
}
return bo;
}


Role实体类央射文件--这里只贴出one-to-many部分:
[code=Java][/code]
  <bag name="userses" inverse="true" lazy="false">
  <key>
  <column name="roleId" not-null="true"></column>
  </key>
  <one-to-many class="com.soonsee.app.domain.Users"/>
  </bag>
  <bag name="roleRights" inverse="true" lazy="false">
  <key>
  <column name="role_id" not-null="true"></column>
  </key>
  <one-to-many class="com.soonsee.app.domain.RoleRight"/>
  </bag>

userses实体类央射文件--这里只贴出many-to-one部分:
[code=Java][/code]
  <many-to-one name="role" class="com.soonsee.app.domain.Role" fetch="join" lazy="false">
  <column name="roleId" not-null="true" />
  </many-to-one>

roleRights实体类央射文件--这里只贴出many-to-one部分:
[code=Java][/code]
  <many-to-one name="role" class="com.soonsee.app.domain.Role" fetch="join" lazy="false">
  <column name="role_id" not-null="true" />
  </many-to-one>


我在网上也看了很多,说在many-to-one设置fetch=FetchType.LAZY,这我这里没有这个属性值,只有join和select两个属性值。
求解决方案!!!!!!!!

------解决方案--------------------
在多的一段设置
inverse="true" lazy="true"
------解决方案--------------------
是在set那边唉