从包含

时间:2017-07-21 14:46:51

标签: java orm mybatis

我想选择看起来像这样的对象列表

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也是必需的。

1 个答案:

答案 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>

它开始起作用了。