日期:2014-05-17  浏览次数:20923 次

关于hibernate的left join
我有表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>
 

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

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

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