论坛首页 入门技术论坛

有空的都来看看这个HQL语句的写法问题

浏览 4459 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-20  
这是一个SQL :
select * from userinfo a left join  (
select b.* from userinfo a left outer join  usergroupinfo b on a.oid=b.userinfooid where b.groupoid=1) b  on a.oid = b.userinfooid

我把上述SQL 转化为HQL:
from com.kmi.expert.model.Userinfo as u left outer join  (select b from com.kmi.expert.model.Userinfo a left outer join  a.Usergroupinfos b where b.groupoid=1) as ug

执行就是不正确,假设所有的配置关系都正确,所有的客观环境都没有问题,要将上面的SQL转化为HQL应当如何写。执行的结果也一样.麻请达人告知.
   发表时间:2007-03-21  
怎么没人知道吗?
0 请登录后投票
   发表时间:2007-03-21  
select user 
from Userinfo as user left outer join user.groups as group
where group.id=1


Userinfo和Group之间应该有个多对多的关系。
0 请登录后投票
   发表时间:2007-03-22  
BirdGu 写道
select user 
from Userinfo as user left outer join user.groups as group
where group.id=1


Userinfo和Group之间应该有个多对多的关系。
兄台,请注意SQL 语句:select * from userinfo a left join (
select b.* from userinfo a left outer join usergroupinfo b on a.oid=b.userinfooid where b.groupoid=1) b on a.oid = b.userinfooid
括号中和括号外的关系。很显然你的语句是不能实现相同功能的.
0 请登录后投票
   发表时间:2007-03-22  
那你先说说你到底要实现什么功能吧。
0 请登录后投票
   发表时间:2007-03-23  
此SQL语句是这样:用户表为主表, 用户组表为用户与组的中间表,首先要实现用户表与用户组表的关联查询(select b.* from userinfo a left outer join usergroupinfo b on a.oid=b.userinfooid where b.groupoid=1),组序列号条件为1,这取出了所有被分配到该组的用户,之后要处理的最终结果为:取所用用户数据及它们与组的分配关系;上述所取到的结果再与用户表关联,得到所有用户与组的关系,也就是说,用户表数据如果与组存在关系,那么该列的数据有值,若不存在关系列值为Null,也就是整个SQL语句的效果。
   现在要把这个SQL语句转成HQL ,就不知道咋弄了.
0 请登录后投票
   发表时间:2007-03-23  
如果你要用HQL,就要从对象模型出发思考问题,而不是仍然用SQL的思考方法。

我认为原来的SQL的功能可以抽象为:“找出所有属于id为1的group的用户,及他们所属的组。”

我给出的HQL可以查出所有属于id为1的group的用户。然后根据用户和组之间的关系(在对象模型中),自然可以找到他们所属的组。

如果仅仅是把SQL翻译成HQL,那么用Hibernate的意义实在不大。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics