`
CindyLiao
  • 浏览: 12521 次
  • 性别: Icon_minigender_2
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

关于hql的inner join 查询

阅读更多
先表达一下找了一个下午到现在还木有吃饭的感觉,
第一、我怎么这么笨
第二、我果然还是个菜鸟
正题:
三张表 UserSpecSer Service 以及Parameter
String hql="select uss from UserSpecSer uss inner join fetch uss.service s inner join fetch s.parameters where uss.user.userId=?";
List list=getHibernateTemplate().find(hql, userId);
一开始调试了很多遍木有报异常,但是list一直都是空的/(ㄒoㄒ)/~~

我以为不能这样查,但是又记得可以这样用,差点想把lazy取消
好吧,怀着好奇的心试着同样的方法查了其它的表
String hql="select u from User u inner join fetch u.userRoles r inner join fetch r.role ro inner join fetch ro.rolePermissions where u.userId=?";
它…………………………………………是可以粗来的……………………!!!!!!!
心中是冰火两重天,更加让我好奇为啥list为空,它特么还木有报错

再试了试debug了一下结果它就出错了(还蛮激动的~~~^_^~~~~~~)
hibernate-Path expected for join 纳尼这是什么东东,so百度罗,话说我就奇怪google一下还要fang对吧,有点懒,而且像我这种菜鸟百度就足够解决我的问题了。then 我觉得不管怎样只要能解决自己的疑惑的方法都可以,虽然说真的是百度出来的答案都是各抄各的,还不带标记转载。


正题:额…………好像我也木有找出why。因为我后面再试了试发现又不报错了*—*
哈哈……有说是因为hql中join查询
select  modle(实际就是你自己取个别名) from TableA modle inner join fetch modle.B where modle.c=?
如果B是另一张表的属性的话就OK,如果是个对象的话就会出现这个错误。
但是我查的就是对象啊,也可以粗来啊。或许它说的是sql(⊙o⊙)…

其实最后的问题在于我虽然看了inner join 还有什么left join 、right join心里想是对啊就是要查两张表共有的数据啊,不西有内连接吗妈妈妈妈妈妈吗………………
泪奔啊……如果Parameter 表里面没有相应的service的数据,那么就是空值,所以就算UserSpecSer和Service有对应的值,它的整体的结果还是NULL!!!
Last:
改成
String hql="select uss from UserSpecSer uss inner join fetch uss.service s left join fetch s.parameters where uss.user.userId=?";
木有Parameter咱们就left join就好了嘛…………哭…………
特写此文警诫粗心的笨蛋仔仔!哈哈哈哈哈………………
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics