关于hibernate的left join

这货没有昵称 2012-08-08 02:09:10
我有表1 user 表2 userinfo
user表中有3行数据 userinfo 有2行数据 关联外键了

String hql="select u from TUserinfo as ui left join ui.TUser as u ";

为什么只能查到两表都有的数据,
而user表中 未关联的一行数据查不到,

是否是我配置文件有错?

<many-to-one name="TUser" class="com.xhce.pojo.TUser" fetch="join" lazy="false" >
<column name="userId" unique="true" />
</many-to-one>


<set name="TUserinfos" inverse="true" lazy="false" cascade="all" outer-join="true">
<key>
<column name="userId" unique="true"/>
</key>
<one-to-many class="com.xhce.pojo.TUserinfo" />
</set>
...全文
126 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-08-08
  • 打赏
  • 举报
回复
要仅仅查出 TUser 中无法对应映射到 TUserinfo 的记录?

那么SQL语句这样(关键是Not In):
Select *
From TUser
Where userId NOT IN (Select userId From TUserinfo)

自己改成HQL吧。
这货没有昵称 2012-08-08
  • 打赏
  • 举报
回复
多谢,我仔细想了一下,把 hql改成
select u from TUser as u left join u.TUserinfos as ui where ui.TUser.userId is null 就查到了,
还是多谢你~
这货没有昵称 2012-08-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

左外连接,是保证左边数据完整出来,也即右边可以null;右外联结,才是保证右边数据完整出来,也即左边可以null。

“而user表中 未关联的一行数据查不到”,也即需要user表数据完整出来。

然而从SQL语句中,TUser表在语句的右侧,所以,楼主我认为你的写法跟你期望的效果刚好相反了。
[/Quote]

那我应该如何得到那个TUserinfo 中为null,TUser中有的对象?
因为是TUser 中有TUserinfo引用,我不知道怎么写这个hql语句。
我试了好多方法,要不就是查到所有记录,要不然就查到2行, 就是不能单独查出那一行单独的记录。
多谢大神~
MiceRice 2012-08-08
  • 打赏
  • 举报
回复
左外连接,是保证左边数据完整出来,也即右边可以null;右外联结,才是保证右边数据完整出来,也即左边可以null。

“而user表中 未关联的一行数据查不到”,也即需要user表数据完整出来。

然而从SQL语句中,TUser表在语句的右侧,所以,楼主我认为你的写法跟你期望的效果刚好相反了。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧