我想选择看起来像这样的对象列表
class CategoryProduct {
String id
String name
List<String> products
}
在我的mapper文件中,我有这段代码
<resultMap type="CategoryProduct" id="categoryProductMap">
<id property="id" column="cpm_category"/>
<result property="name" column="c_name"/>
<collection property="products" ofType="string" column="cpm_license_product"/>
</resultMap>
<select id="getProductsForAllCategories" resultMap="categoryProductMap">
SELECT
cpm.category_uid cpm_category,
c.name c_name,
cpm.pm_license_product_uid cpm_license_product
FROM ${schema}.category_product_map cpm
INNER JOIN ${schema}.category c
ON c.category_uid = cpm.category_uid
GROUP BY cpm_category, c_name, cpm_license_product
</select>
我像这样调用选择
getTemplate().selectList(getNamespace() +".getProductsForAllCategories");
我期待这个结果
id: CATEGORY_1,
name: 'first category',
products: [PRODUCT_1, PRODUCT_2]
但我得到的结果看起来像这样
id: CATEGORY_1,
name: 'first category',
products: [CATEGORY_1, CATEGORY_1]
它不会返回产品,而是复制ids
字段中的products
。这是为什么?有什么问题?
GROUP BY
也是必需的。
答案 0 :(得分:0)
我将resultMap
更改为
<resultMap type="CategoryProduct" id="categoryProductMap">
<id property="id" column="cpm_category"/>
<result property="name" column="c_name"/>
<collection property="products" ofType="string" javaType="java.util.ArrayList">
<result column="cpm_license_product"/>
</collection>
</resultMap>
它开始起作用了。