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

100分解决Hibernate中的left outer join问题,在线等
数据库:orcale9i
hibernate 3.0
left outer join语句在plsql 运行正常,改成hql语句后,却报错误,不知道什么原因,请大家帮忙解决!

hql语句:
StringBuffer hsqlOneLine = new StringBuffer("select new Map(a.bank_code as bankCode,a.bank_name as bankName,a.bank_type as bankType,a.type_name " +
" as typeName,a.bif_code as bifCode,b.bankAcc as bankAcc,b.accName as accName,b.accType as accType,b.isgather as isGather,c.bankBal as bankBal,c.balDate as balDate ) from BtBankAcc b "+
" left outer join VBanKTypeAndBanK a on b.btBank.bankCode = a.bank_code "+
" left outer join BisAccHisBal c on b.bankAcc = c.id.bankAcc "+
" and b.validSign=1 and b.accountstate <> 4 "+ 
" and b.bisType=? "+
" and c.balDate=to_date(?,'yyyy-MM-dd')");



------解决方案--------------------
对spring不是很懂,关注下!
------解决方案--------------------
怎么错误信息和你贴得sql问不一样呢
com.bmcc.fundmgt.bank.pojo.BtBankAcc b
这是什么?
------解决方案--------------------
hql.append("SELECT {a.*},{b.*} "); 为什么要用大括号,能解释一下吗? 

这个是hibernate的规定,查询entity的映射就是这么写的
------解决方案--------------------
这样的写法用在spring+hibernate+struts项目中是没有问题的
我写这些只是给你个例子参考
大括号的意思是取实体类,我的写法是要取两个相关联的实体类
------解决方案--------------------
我个人不太喜欢用new Map()这种方式
一般我是把需要取的实体都取出,然后从中得到我需要的值。
把这些需要的值再放到一个JavaBean中作为DTO。
------解决方案--------------------
其实完全可以利用HBM。XML来配置这种查询,或者不行直接用named query好了。。。何必搞的这么麻烦呢