hibernate HQL left join on 使用及多表连接取不同表(封装类)字段数据显示解决办法
2013-06-03 10:42
573 查看
在使用hibernate时,运用hql语句查询数据,使用join on多表连接查询,不能在hql中使用on,需在hibernate配置文件中配置好。
原本hql语句如下:
修改后的hql语句为:
在前台页面使用struts2标签显示数据时,因多表连接查询设计到几个表,及几个封装类,查询到的list不能单独为某个封装类的list,所以在hql语句中要写明对应不同表的字段,增加一个普通的Bean封装类,包括显示多表字段的属性:
前台jsp页面:
原本hql语句如下:
String sql="select o.wooHotlineInfoId.ponWorkNo,o.ponNumber,d.workId,o.workType," + "o.nameCode,o.subNameCode,o.serviceCode,o.contidion,o.updateTime,o.versionCode"+ " from wopHotlineInfo o"+ " left join wopHotlineDetail d on o.wooHotlineInfoId.paiOrderNo = d.wopHotlineDetailId.ponWorkNo"+ " and o.wooHotlineInfoId.versionNo = d.wopHotlineDetailId.versionCode"+ " left join PonHotlineBackInfo r on r.ponWorkNo = o.wooHotlineInfoId.ponWorkNo || ':SS' ||"+ "o.wooHotlineInfoId.versionCode"+ " and o.wooHotlineInfoId.ponWorkNo in"+ "(select i.wooHotlineInfoId.ponWorkNo"+ " from wopHotlineInfo i"+ " left join wopHotlineDetail d on i.wooHotlineInfoId.ponWorkNo ="+ "d.wopHotlineDetailId.ponWorkNo"+ " and i.ponNumber = 'ponnumber')"+ " order by o.wooHotlineInfoId.ponWorkNo desc";但在执行过程中是有错误的,left join on 需在配置文件中配置,在封装类WopHotLineInfo中增加属性:
private Set<WopHotlineDetail> wopHotlineDetailSet; public Set<WopHotlineDetail> getWopHotlineDetailSet() { return wopHotlineDetailSet; } public void setWopHotlineDetailSet(Set<WopHotlineDetail> wopHotlineDetailSet) { this.wopHotlineDetailSet = wopHotlineDetailSet; }WopHotLineInf.hbm.xml增加配置:
<set name="wopHotlineDetailSet" table="com.ssh.work.po.WopHotlineDetail" inverse="true" lazy="true" cascade="none" fetch="join"> <key> <column name="PON_WORK_No" /> <column name="VERSION_CODE" /> </key> <one-to-many not-found="ignore" class="wopHotlineDetail"/> </set>
修改后的hql语句为:
String sql="select o.wooHotlineInfoId.ponWorkNo,o.ponNumber,d.workId,o.workType," + "o.nameCode,o.subNameCode,o.serviceCode,o.contidion,o.updateTime,o.versionCode"+ " from wopHotlineInfo o"+ " left join o.wopHotlineDetailSet d" + " and o.wooHotlineInfoId.ponWorkNo in"+ "(select i.wooHotlineInfoId.ponWorkNo"+ " from wopHotlineInfo i"+ " left join wopHotlineDetailSet d "+ " and i.ponNumber = 'ponnumber')"+ " order by o.wooHotlineInfoId.ponWorkNo desc";即可。
在前台页面使用struts2标签显示数据时,因多表连接查询设计到几个表,及几个封装类,查询到的list不能单独为某个封装类的list,所以在hql语句中要写明对应不同表的字段,增加一个普通的Bean封装类,包括显示多表字段的属性:
List list=query.list(); String ponWorkNo; (...) WopHotlineInfoBean wopHotlineInfoBean=new IbpIptvInfoBean(); List<WopHotlineInfoBean> wopHotlineInfoBeanList = new ArrayList<WopHotlineInfoBean>(); for(int i=0;i<list2.size();i++){ ponWorkNo=(String)((Object[])list.get(i))[0]; (...) 或者( for (Object o : list) { Object[] obj = (Object[]) o; ponWorkNo=(obj[0].toString(); } ) wopHotlineInfoBean.setPonWorkNo(ponWorkNo); wopHotlineInfoBeanList.add(wopHotlineInfoBean); } return wopHotlineInfoBeanList;
前台jsp页面:
<s:iterator value="wopHotlineInfoBeanList "> <tr> <td><s:property value="ponWorkNo"/></td> <td><s:property value=""/></td> <td><s:property value=""/></td> <td><s:property value=""/></td> <td><s:property value=""/></td> <td><s:property value=""/></td> <td><s:property value=""/></td> <td><s:property value=""/></td> </tr> </s:iterator>
相关文章推荐
- Hibernate使用原生SQL多表查询时字段名相同导致查询数据覆盖问题解决办法
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- mysql导入导出数据中文乱码解决方法小结(1、navicat导入问题已解决,创建连接后修改连接属性,选择高级->将使用Mysql字符集复选框去掉,下拉框选择GBK->导入sql文件OK;2、phpmyadmin显示乱码的问题也解决,两步:1.将sql文件以utf8的字符集编码另存,2.将文件中sql语句中的字段字符集编码改成utf8,导入OK)
- 使用hql使用order by子句出现异常和数据异常的解决办法org.hibernate.hql.internal.ast.QuerySyntaxException
- [转]Hibernate不能自动建表解决办法及Hibernate不同数据库的连接及SQL方言
- hibernate使用createQuery(hql)语句仅查询部分字段,应如何获得数据
- 解决Asp.net下GridView中显示数据字段文字过长的办法
- secureCRT连接esxi使用esxtop不能正常显示的解决办法
- 关于使用DirectShow架构,传输YUV420数据的Filter与Video Renderer Filter连接问题的解决办法。
- Hibernate数据的lazy问题,以及使用spring整合hibernate lazy的解决办法(好文转载)
- 关于使用DirectShow架构,传输YUV420数据的Filter与Video Renderer Filter连接问题的解决办法。
- plsql使用Text Importer导入csv数据时不显示导入的个数出现假死的解决办法
- 每日一得-org.hibernate.hql.ast.QuerySyntaxException: Path expected for join!错误解决办法
- hibernate添加数据,默认字段为null的解决办法
- HIVE LEFT JOIN ON AND不支持非等值关联解决办法1
- 使用ajax请求后返回数据显示undefinded解决办法
- Hibernate不能自动建表解决办法及Hibernate不同数据库的连接及SQL方言
- left join on左连接的使用
- 解决hibernate中不能正常使用blog类型字段上传数据的问题
- mysql 在select * from A left join B 多张表,不同表的主建ID会发生冲突的解决办法