读书人

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

发布时间: 2012-11-20 09:55:44 作者: rapoo

有空的都来看看这个HQL语句的写法问题
这是一个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应当如何写。执行的结果也一样.麻请达人告知.select user from Userinfo as user left outer join user.groups as groupwhere group.id=1

Userinfo和Group之间应该有个多对多的关系。select user from Userinfo as user left outer join user.groups as groupwhere 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
括号中和括号外的关系。很显然你的语句是不能实现相同功能的. 4 楼 BirdGu 2007-03-22 那你先说说你到底要实现什么功能吧。 5 楼 ssy8110 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 ,就不知道咋弄了. 6 楼 BirdGu 2007-03-23 如果你要用HQL,就要从对象模型出发思考问题,而不是仍然用SQL的思考方法。

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

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

如果仅仅是把SQL翻译成HQL,那么用Hibernate的意义实在不大。

读书人网 >其他相关

热点推荐