问题
我有一个返回 17 条记录的查询。当我将 MyBatis 与具有<association>
它的地图一起使用时,它会返回 6 条记录。请注意,我的其他地图不会发生这种情况,我有许多其他地图的关联都可以正常工作。
询问:
with leave_counts as
(
select leave_type_id, count(llm.leave_id) as count
from lw_leave_master llm
group by leave_type_id
)
select llt.leave_type_id, llt.leave_type_abbr_tx,
llt.leave_type_desc_tx, lc.count as count_nm
from lw_leave_type llt
join leave_counts lc on lc.leave_type_id=llt.leave_type_id
order by llt.leave_type_abbr_tx
地图:
<resultMap id="typeCountMap" type="mypackage.myclass">
<result property="count" column="count_nm"/>
<association property="type" resultMap="package.myMap"/>
</resultMap>
<resultMap id="myMap" type="mypackage.myclass2">
<result property="id" column="leave_type_id"/>
<result property="abbr" column="leave_type_abbr_tx"/>
<result property="description" column="leave_type_desc_tx"/>
</resultMap>
<association>
intypeCountMap
指的是地图myMap
。
这每次返回 6 条记录。从记录器中获取实际运行的查询并手动运行它会返回 17 条记录。
解决方案?
我可以做两件事来让 MyBatis 返回所有 17 条记录
#1
如果我lc.count as count_nm
从查询中删除,我会返回所有 17 条记录(只是没有与它们关联的值)
with leave_counts as
(
select leave_type_id, count(llm.leave_id) as count
from lw_leave_master llm
group by leave_type_id
)
select llt.leave_type_id, llt.leave_type_abbr_tx,
llt.leave_type_desc_tx
from lw_leave_type llt
join leave_counts lc on lc.leave_type_id=llt.leave_type_id
order by llt.leave_type_abbr_tx
这显然不是一个好的解决方案,但我想包括这个,以防它帮助你找出我做错了什么。
#2
如果我用另一张地图的内容替换关联,一切都会按预期工作。
<resultMap id="typeCountMap" type="mypackage.myclass1">
<result property="count" column="count_nm"/>
<result property="type.id" column="leave_type_id"/>
<result property="type.abbr" column="leave_type_abbr_tx"/>
<result property="type.description" column="leave_type_desc_tx"/>
</resultMap>
如果我找不到其他解决方案,这显然是我会做的,因为这确实有效。<association>
使用我在其他地图中的方式会很好。
我应该注意我使用的是 MyBatis 3.1.1