高手请帮忙把Hibernate中SQL转HQL,详细见内容

Phil-Wu 发布于 2009/09/16 13:07
阅读 1K+
收藏 0

以下是SQL SERVER 2000中编写的代码:

SELECT m.shoesid, m.shoesname, m.shoestype, m.shoessize, m.shoescolor, m.shoesprice, m.shoesstate, n.shoesNum
FROM Shoes AS m INNER JOIN
(SELECT a.shoesid, ISNULL(a.x, 0) - ISNULL(b.x, 0) AS shoesNum FROM
(SELECT shoesid, SUM(shoesnum) AS x FROM Stock AS ss GROUP BY shoesid) AS a
LEFT JOIN
(SELECT shoesid, SUM(salesnum) AS x FROM Sales AS cc GROUP BY shoesid) AS b
ON a.shoesid = b.shoesid) AS n ON m.shoesid = n.shoesid

其中:
表Stock ,Shoes ,Sales 为实体对象。
由于系统的数据库可能未知,而上面的SQL语句中用到了SQL SERVER 中特有的函数Isnull。所以如果我用原生SQL来做的话,换了个数据库系统肯定是不行的。
所以请帮忙用HQL实现以上语句,或者用Criteria实现也可以。不胜感激!

加载中
0
红薯
红薯

Hibernate 并不能解决100%的问题,有些时候也要辅以 SQL

而且这个 SQL 那么复杂,还不如直接用 SQLQuery 直接处理了。

0
Phil-Wu
Phil-Wu

引用来自“红薯”的帖子

Hibernate 并不能解决100%的问题,有些时候也要辅以 SQL

而且这个 SQL 那么复杂,还不如直接用 SQLQuery 直接处理了。

不可以用SQLQuery啊,因为这个SQL语句用到了SQLSERVER的函数ISNULL。如果我换了个数据库引擎,那就不行了,比如MYSQL。。。。明白我的意思了吧。

其实这个语句不复杂的。看看还有别的什么方法解决不了?

0
黄平俊
黄平俊

土方法就是把SQL拆成N个HQL,然后再在程序里去组吧~~~

0
Smch_tb
Smch_tb

转化很简单,对应着你的映射文件就是了,但是要注意的是:在Hibernate 的HQL查询中,如果你要写上INNER JOIN , LEFT JOIN  这样的关键字的话,就必须专门做出映射文件来配置你inner join...on   on后面的条件。left join...on 同样,你写几个on 就要配几个文件。

0
Phil-Wu
Phil-Wu

引用来自“小Break”的帖子

转化很简单,对应着你的映射文件就是了,但是要注意的是:在Hibernate 的HQL查询中,如果你要写上INNER JOIN , LEFT JOIN  这样的关键字的话,就必须专门做出映射文件来配置你inner join...on   on后面的条件。left join...on 同样,你写几个on 就要配几个文件。

 不会吧。这也太太那个了。我肯定是想走捷径了。

达到快速而有简介的目的,不想搞的那么复杂化。

0
Phil-Wu
Phil-Wu

引用来自“Jimmy”的帖子

土方法就是把SQL拆成N个HQL,然后再在程序里去组吧~~~

 这个。。。可以是可以,但实在是繁琐,供参考用吧。

0
Smch_tb
Smch_tb

引用来自#6楼“小飞飞”的帖子

引用来自“小Break”的帖子

转化很简单,对应着你的映射文件就是了,但是要注意的是:在Hibernate 的HQL查询中,如果你要写上INNER JOIN , LEFT JOIN  这样的关键字的话,就必须专门做出映射文件来配置你inner join...on   on后面的条件。left join...on 同样,你写几个on 就要配几个文件。

 不会吧。这也太太那个了。我肯定是想走捷径了。

达到快速而有简介的目的,不想搞的那么复杂化。

好长时间以前的,帖子了。。如果走高效的话?我觉得还是在程序里面 写成本地SQL语句。换个hibernate的执行方法。

0
SeekerLee
SeekerLee

hibernate果然增加了程序员的学习成本

返回顶部
顶部