ibatis resultmap嵌套查询 空值如何处理
问题描述如下:
tableA
aid(not null) acol1 acol2
1 AAA AAA
2 AAAA AAAA
3 AAAAA AAAAA
tableB
bid(not null) aid(not null) bcol1 bcol2
1 1 b11 b12
2 2 b21 b22
pojo对象如下:
public class TableA implements Serializable {
private int aid;
private String acol1;
private String acol2;
private List<TableB> tablebList;
}
现在想在sqlmap中进行配置,希望查询tableA记录的时候顺便把与tableA记录相关的tableB记录一起查询出来放到TableA对象的属性tablebList当中。配置如下:
<resultMap id="TableA-Result-List" class="tablea" groupBy="aid">
<result property="aid" column="aid"/>
<result property="acol1" column="acol1"/>
<result property="acol2" column="acol2"/>
<result property="tablebList" resultMap="TableB-Reslut-List"/>
</resultMap>
这里是想让执行查询语句的时候自动把属于aid的tableb的记录直接被赋值到tablebList属性中。
由于实际情况是tableA中的记录可能在tableB中并无对应的记录,为了保证tableA的记录全部要查出来,所以查询用了左连接:
<select id="getAbs" resultMap="TableA-Result-List">
select a.*, b.* FROM tableA a left JOIN tableB b
on b.aid=a.aid
</select>
问题出现了,左连接查询的结果包括如下一条记录:
aid acol1 acol2 bid aid1 bcol1 bcol2
3 AAAAA AAAAA null null null null
即aid=3的记录在tableB中并无对应的记录,而tableB的bid又是不允许为空的!所以导致ibatis为tablebList属性赋值TableB对象时报了不允许为null的错误。
请问大家要想达到我希望的效果(tableA记录全部取出来,并且一次把属于tableA记录的tableB记录也查出来放到TableA对象的tablebList属性中,但是有可能出现空值无法赋值的问题),应该如何在ibatis中进行配置?
------解决方案--------------------我现在用的iBATIS和 PostgreSQL,
在postgre里,我抽出对象的时候可以写成
null::varchar
你用的应该是Oracle吧,你要不用nvl(,)把他填上值
------解决方案--------------------不要这么查
------解决方案--------------------
你可以不在ibatis这样设置,你pojo里面添加了tableblist,在你的Dao实现类的查询语句里面写几句代码查出tableb的信息,再set到你的tablea里,拙见仅供参考