浏览 4458 次
锁定老帖子 主题:有空的都来看看这个HQL语句的写法问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-20
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应当如何写。执行的结果也一样.麻请达人告知. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-03-21
怎么没人知道吗?
|
|
返回顶楼 | |
发表时间:2007-03-21
select user from Userinfo as user left outer join user.groups as group where group.id=1 Userinfo和Group之间应该有个多对多的关系。 |
|
返回顶楼 | |
发表时间:2007-03-22
BirdGu 写道 select user from Userinfo as user left outer join user.groups as group where group.id=1 Userinfo和Group之间应该有个多对多的关系。 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 括号中和括号外的关系。很显然你的语句是不能实现相同功能的. |
|
返回顶楼 | |
发表时间:2007-03-22
那你先说说你到底要实现什么功能吧。
|
|
返回顶楼 | |
发表时间: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 ,就不知道咋弄了. |
|
返回顶楼 | |
发表时间:2007-03-23
如果你要用HQL,就要从对象模型出发思考问题,而不是仍然用SQL的思考方法。
我认为原来的SQL的功能可以抽象为:“找出所有属于id为1的group的用户,及他们所属的组。” 我给出的HQL可以查出所有属于id为1的group的用户。然后根据用户和组之间的关系(在对象模型中),自然可以找到他们所属的组。 如果仅仅是把SQL翻译成HQL,那么用Hibernate的意义实在不大。 |
|
返回顶楼 | |