`

hibernate多表查询

    博客分类:
  • java
阅读更多
二张表分别为用户表(users)和贴子表(notes),其中users中的userid是notes表的外键,users跟notes是一对多,多对一关系,由myEclpise自动生成映射文件
Users.hbm.xml

Java代码 复制代码

    ...... 
     
     <set name="noteses" inverse="true"> 
         <key> 
             <column name="userid" not-null="true" /> 
         </key> 
         <one-to-many class="com.note.model.Notes" /> 
     </set> 
     
    ..... 



Notes.hbm.xml

Java代码 复制代码

    ...... 
     
      <many-to-one name="users" class="com.note.model.Users" fetch="select"> 
          <column name="userid" not-null="true" /> 
      </many-to-one> 
     
    ...... 



注意:如果多表查询,在写HQL语句时取notes的userid字段不能写notes.userid(这个问题下午我查了好久,才找到原因的)

HQL语句:From Notes notes,Users users WHERE notes.users=users.userid AND notes.issubject=1

又一注意点:该查询结果为存放对象数组的list集,可以用以下代码测试

Java代码 复制代码

                       page=ins.listSubjects(page);//page是我的分页类,并存放了查询后的返回结果 
    List list=page.getResult(); 
    System.out.println(page.getPageToolBar()); 
    for(int i=0;i<list.size();i++){ 
        Object[] obj=(Object[])list.get(i); 
        for(int j=0;j<obj.length;j++){ 
            if(obj[j] instanceof Notes){ 
                Notes note=(Notes)obj[j]; 
                System.out.print(note.getTitle()); 
                 
            }else if(obj[j] instanceof Users){ 
                Users user=(Users)obj[j]; 
                System.out.print(user.getUsername()); 
            } 
        } 
        System.out.println(); 
    } 



在jsp页面显示结果的时候我觉得用EL表达式会简单的多,如:
Java代码 复制代码

    <logic:present name="subjects"> 
            <table width="100%" border="1" rules="rows" frame="below" cellpadding="5" cellspacing="0" bordercolorlight="#6C7BA6" bordercolordark="#ffffff" bgcolor="#DEEFFF" class="DoubleColorTable"> 
                <logic:present name="subjects" property="result"> 
                <logic:iterate id="objs" name="subjects" indexId="number" property="result"> 
                    <tr> 
                        <td> 
                        <html:link page="/listFollow.do?method=listFollow&subjectId=${objs[0].noteid}"  styleId="link001"> 
                            主题:${objs[0].title} 
                        </html:link> 
                        </td> 
                        <td> 
                        作者:${objs[1].username} 
                        </td> 
                        <td> 
                        发贴时间:${objs[0].addtime} 
                        </td> 
                    </tr> 
                </logic:iterate> 
                </logic:present> 
            </table> 
            <bean:write name="subjects" property="pageToolBar" filter="false" /> 
        </logic:present> 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics