日期:2014-05-20  浏览次数:20785 次

hibernate的 原生sql查询 和 在数据库中查询结果集 竟然不一样
今天碰到一个很奇怪的问题 用sql 在 数据库中查询出来的数据 和用hibernate 的 createSqlQuery(sql) 查询出来的数据竟然不一样  
sql 如下 : 涉及到 用户表 主题表 和回复表 三张表有相应的关联关系 主要想查询 主题id 主题标题 

主题的回帖数 主题作者 最后发表人 最后发表时间 这六个 其中最后发表人 和时间 用到了 子查询 

select topic_id,topic_title ,count(reply_of_topic) ,FORUSER_NAME ,(select top 1 reply_time from wochengz.Tb_FORUMREPLY where reply_of_topic=topic_id order by convert(datetime,reply_time) desc) ," +
"(select top 1 FORUSER_NAME from wochengz.Tb_FORUMREPLY inner join wochengz.Tb_FORUMUSER on "+
"reply_owner=FORUMUSER_ID where reply_of_topic=topic_id order by convert(datetime,reply_time) desc) "+
" from wochengz.tb_topic inner join wochengz.Tb_FORUMREPLY on topic_id=reply_of_topic inner join wochengz.Tb_FORUMUSER "+
" on topic_owner=FORUMUSER_ID group by reply_of_topic,topic_title,FORUSER_NAME,topic_id

createSqlQuery(sql)和 数据库中查询的sql 绝对一样  

sql中查询数据没问题 

后来createSqlQuery(sql)查询出来后 那个最后发表人 和 最后发表时间 没有了 换成了相应的 主题的回帖者的 数量 和 回帖时间的 统计个数 比如说 主题有四个回复 所以最后那两个都成了 4

我不知道为啥出现这个 让人纳闷的结果 难道是用了 子查询的缘故 还是什么的


dao的 
createSqlQuery(sql)代码 List list=getSession().createSQLQuery(sql).list();


这问题 还真纳闷呢 大家帮我解决看 感激不尽了

------解决方案--------------------
SQL code

select topic_id,topic_title ,count(reply_of_topic) reply_num ,FORUSER_NAME ,(select top 1 reply_time from wochengz.Tb_FORUMREPLY where reply_of_topic=topic_id order by convert(datetime,reply_time) desc) reply_time," +
"(select top 1 FORUSER_NAME from wochengz.Tb_FORUMREPLY inner join wochengz.Tb_FORUMUSER on "+
"reply_owner=FORUMUSER_ID where reply_of_topic=topic_id order by convert(datetime,reply_time) desc) reply_user"+
" from wochengz.tb_topic inner join wochengz.Tb_FORUMREPLY on topic_id=reply_of_topic inner join wochengz.Tb_FORUMUSER "+
" on topic_owner=FORUMUSER_ID group by reply_of_topic,topic_title,FORUSER_NAME,topic_id