hibernate多表查询
来源:互联网 发布:布丁淘客软件 编辑:程序博客网 时间:2024/05/21 10:06
我的demo小程序随着我学习的过程、体积也越来越庞大起来了、开始只是用来测试hibernate、渐渐的Spring,struts,dwr(我在用来做验证的过程因为异步,效果反而不好,所以后来拿掉了)的身影也出现了,到如今他已经有注册、登陆、发贴、查看主题、查看跟贴,回贴的能耐了,呵呵,为他而高兴。在前面学习的过程中先避开一些难点,比如多表查询、AOP切面编程等等,不过为了满足需求,今天开始将多表应用上去了,确实遇到了不少麻烦,花了不少的时间,当然在遇到问题,解决问题的过程中让我回顾了很多要点、盲点,也值了。 :)
现在将关键点记录下来,以免日后再有相同问题出现,以便查阅。
二张表分别为用户表(users)和贴子表(notes),其中users中的userid是notes表的外键,users跟notes是一对多,多对一关系,由myEclpise自动生成映射文件
Users.hbm.xml
Notes.hbm.xml
注意:如果多表查询,在写HQL语句时取notes的userid字段不能写notes.userid(这个问题下午我查了好久,才找到原因的)
HQL语句:From Notes notes,Users users WHERE notes.users=users.userid AND notes.issubject=1
又一注意点:该查询结果为存放对象数组的list集,可以用以下代码测试
在jsp页面显示结果的时候我觉得用EL表达式会简单的多,如:
现在将关键点记录下来,以免日后再有相同问题出现,以便查阅。
二张表分别为用户表(users)和贴子表(notes),其中users中的userid是notes表的外键,users跟notes是一对多,多对一关系,由myEclpise自动生成映射文件
Users.hbm.xml
- ......
- <set name="noteses" inverse="true">
- <key>
- <column name="userid" not-null="true" />
- </key>
- <one-to-many class="com.note.model.Notes" />
- </set>
- .....
...... <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
- ......
- <many-to-one name="users" class="com.note.model.Users" fetch="select">
- <column name="userid" not-null="true" />
- </many-to-one>
- ......
...... <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集,可以用以下代码测试
- 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();
- }
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表达式会简单的多,如:
- <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>
- hibernate多表查询
- hibernate多表查询
- Hibernate多表查询
- hibernate多表查询
- hibernate多表查询
- Hibernate 多表查询
- hibernate多表查询
- hibernate多表查询
- hibernate多表查询
- Hibernate多表查询
- hibernate 多表查询
- hibernate多表查询
- hibernate 多表查询
- hibernate多表查询
- hibernate 多表查询
- hibernate多表查询
- hibernate多表查询
- Hibernate多表查询
- LZW网页判重
- oracle 获取系统时间
- GCC编译器的使用
- BeginPaint()与GetDC()的区别
- 开始学汇编
- hibernate多表查询
- HP大中华区总裁孙振耀退休十五天后九大感言
- 股市箴言
- ORACLE基本配置
- 两单向链表相交问题
- Enforcing mode requested but no policy loaded. Halting now!kernel panic - not syncing: Attenpted to kill init问题
- EPG简介
- 从.NET平台调用Win32 API
- c#.net中参数修饰符ref,out ,params得区别?