我有一个返回 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>
中的typeCountMap
指的是地图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
我最近遇到了同样的问题。我相信这个问题与我的主 resultMap 有关,其中的关联没有 id 列,而我的关联的 resultMap 确实有 id 列。我的结果按关联 id 列进行分组。
为了纠正该问题,我在查询中选择了行号,并向主 resultMap 添加了一个指向行号列的 id。
如果您使用的是 3.1.1,您可以只定义
如果您不使用 3.1.1,您可以在列表顶部添加
我不知道这是否是问题所在,但可以尝试一下。我必须在这里发帖,因为我没有足够的代表发表评论。
尝试向您的关联添加列属性并在第二张地图中标记 ID 列:
<resultMap id="typeCountMap" type="mypackage.myclass">
<result property="count" column="count_nm"/>
<association property="type" column="leave_type_id" resultMap="package.myMap"/>
</resultMap>
<resultMap id="myMap" type="mypackage.myclass2">
<id property="id" column="leave_type_id"/>
<result property="abbr" column="leave_type_abbr_tx"/>
<result property="description" column="leave_type_desc_tx"/>
</resultMap>
您应该更换线路
<result property="id" column="leave_type_id"/>
与
<id property="id" column="leave_type_id"/>
。
在 mybatis 中,你不应该错过指定 id 列,它可能会弄乱你的结果集。
当我同时应用
rowBounds(pagination)
和association/collection(join)
时,我也遇到同样的问题。
分页是根据连接结果计算的,有效地截断了一些记录。
这种情况下,ResultMap 就可以正常返回了。希望 MyBatis 能够对此发出警告。