日期:2014-05-18  浏览次数:20716 次

hibernate多表查询 iterate读取的问题
三个表 experts bigclass smallclass
experts通过smallclassid和smallclass关联 通过bigclassid和bigclass关联

Hibernate通过以下HQL取出数据"from Experts e inner join e.bigclass inner join e.smallclass"
如果我直接些代码从request当中取数据 是正常的 代码如下:
 <%
List list=(List)request.getAttribute("CLINFOS");
Iterator it = list.iterator();
while (it.hasNext())
{  
Object[] object=(Object[])it.next();
Experts experts=(Experts)object[0];
Bigclass bigclass=(Bigclass)object[1];
Smallclass smallclass=(Smallclass)object[2];

%>

  <tr>
  <td height="29" align="center"><%=experts.getId() %></td>
  <td align="center"><%=experts.getName() %></td>
  <td align="center"><%=bigclass.getClassname() %></td>
  <td align="center"><%=smallclass.getClassname() %></td>
  <td align="center"><%=experts.getWorkunit() %></td>
  </tr>

  <%
   
  }
%> 

  可以看出 在request的CLINFOS当中 每一行数据包含了三个类Experts Bigclass Smallclass
  但我通过struts却取不出

  <logic:iterate id="experts" name="CLINFOS" indexId="id" scope="request">
  <tr>
<td height="29" align="center"><bean:write name="experts" property="name"/></td>
  </tr>
  </logic:iterate>

  这样做不行,no getter method。 于是我定义了一个新的Bean,名字叫ExpertsEx 包含了Experts和Bigclass,Smallclass三个类。然后
  <logic:iterate id="expertsEx" name="CLINFOS" indexId="id" scope="request">
  <tr>
<td height="29" align="center"><bean:write name="expertsEx" property="experts.name"/></td>
  </tr>
  </logic:iterate>
  结果还是提示我没有getter方法
  当我把logic:iterate id="expertsEx"改成logic:iterate id="fuck",fuck是一个不存在的类,依然是没有getter方法。
  抓狂了,请各位达人帮忙,绝不是大小写的问题,已经验证。

------解决方案--------------------
<logic:iterate id="subItem" name="CLINFOS" indexId="id" scope="request" > 
<bean:define id="name" name="subItem" type="java.lang.Object[]"></bean:define>
<bean:define id="experts" value="<%=name[0]%>" type="Experts"></bean:define>
<bean:define id="bigclass" value="<%=name[1]%>" type="Bigclass"></bean:define>
<bean:define id="smallclass" value="<%=name[2]%>" type="Smallclass"></bean:define>
<tr > 
<td height="29" align="center" > <bean:write name="experts" property="id"/ > </td > 
<td height="29" align="center" > <bean:write name="experts" property="name"/ > </td > 
<td height="29" align="center" > <bean:write name="bigclass" property="classname"/ > </td > 
<td height="29" align="center" > <bean:write name="smallclass" property="classname"/ > </td &