問題
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>
inはtypeCountMap
地図を指しますmyMap
。
これにより、毎回 6 つのレコードが返されます。ロガーから実行された実際のクエリを取得して手動で実行すると、17 レコードが返されます。
ソリューション?
MyBatis が 17 レコードすべてを返すようにするためにできることは 2 つあります。
#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 を使用していることに注意してください。