hibernate HQL left join on 使用及多表连接取不同表(封装类)字段数据显示解决办法

在使用hibernate时,运用hql语句查询数据,使用join on多表连接查询,不能在hql中使用on,需在hibernate配置文件中配置好。
原本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>



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值