日期:2014-05-16  浏览次数:20577 次

Hibernate执行createSQLQuery查询与在数据库中查询的结果不一致的问题

今天发现一个奇怪的问题,先看如下SQL语句:

SELECT
	a.num,
	b.num,
	a.depart
FROM
	(
		(
			SELECT
				count(depart_Id) AS num,
				depart_Id AS depart
			FROM
				tiku_class			
			GROUP BY
				depart_id
		) a
		JOIN (
			SELECT
				count(depart_id) AS num,
				depart_id AS depart
			FROM
				tiku_news			
			GROUP BY
				depart_id
		) b ON a.depart = b.depart
	)
ORDER BY
	b.num DESC

?直接在MySQL中运行返回如下结果:



?再看在程序中使用Hibernate的:

  SQLQuery query = session.createSQLQuery(sql);
  return query.list();

?的结果:



?可以发现b.num的值等于a.num

太奇怪了吧,打开Hibernate的show_sql选项,将打印的SQL在mysql中执行依然没问题,崩溃。。难道是Hibernate的Bug,没可能啊 ,网上搜索也没发现类似情况。

?

就在百思不得其解的时候,突然看见了这个:


我的SQL代码中明明写的是a.num 和b.num,怎么结果显示的是num 和num1呢?

难道是num 别名相同的原因?

将SQL语句改成这样:

SELECT
	a.numa,
	b.numb AS numb,
	a.depart
FROM
	(
		(
			SELECT
				count(depart_Id) AS numa,
				depart_Id AS depart
			FROM
				tiku_class			
			GROUP BY
				depart_id
		) a
		JOIN (
			SELECT
				count(depart_id) AS numb,
				depart_id AS depart
			FROM
				tiku_news			
			GROUP BY
				depart_id
		) b ON a.depart = b.depart
	)
ORDER BY
	numb DESC

?
?再次运行程序,Oh Yes!这次结果终于正确了!

?

具体原因目前还说不清楚,但是以后写SQL语句起别名还是要注意些啊,尽量不要起一样的别名啊
?