问题描述
前提,配置文件不让设置关联在两张表里面selecta.*,b.downcountfrom(select*fromcsl_content_detailwherecslno=?)asaleftjoin(selectsum(downcount)asdowncountfromcsl_contentdowncount_logwherecslno=?groupbydowncount)bwherea.cttid=b.cttid这里面关联了两张表,影射到HQL这么影射
解决方案
解决方案二:
不设关联,还是用JDBC直接吧,要是遇到2000多字的SQL,用HQL不累死啊。
解决方案三:
这种关联hql实现太麻烦了因为hql是基于对象操作的那么你要用leftjoin这个关联模式的话那么你关联的表所对应的映射文件中需要建立对应关系可能是manytoone这种才能再进行下一步的操作建议楼主不要去想怎么去用hql去实现了hibernate不是支持sql文执行的直接执行你这个方法不久行了得到list中放的就是一个object数据这样可以很快解决这个问题hql是基于数据库表建立的映射文件的pojo对象进行操作的一般用到join这种关联方式的在映射文件中都有配置的
解决方案四:
selecta,sum(a.Bdao.downcount)as_downcountfromAdaoasawherea.cslno=?anda.Bdao.cttid=a.cttidgroupby_downcount大概就是这样,没测试过不保证能用,关键不是在hql上,而是在你的配置文件,和DAO的的实现上。cslno应该是一个关键字,那么你查出的A中就应该包含B的对象,那么就当一个表直接加条件就行了。问题是你要的返回值类型并不是标准的DAO,你需要自定义返回值类型。建议你不要使用hql,用CriteriaQueries条件查询,更灵活一些。因为配置文件一旦关联再想改回来就麻烦了,具体的条件查询使用方法就不多说了。