【发布时间】:2015-01-17 03:54:52
【问题描述】:
我无法将复合键传递给 MyBatis <collection> 元素(使用版本 3.2.7)。 MyBatis documentation 声明:
注意:要处理复合键,您可以使用语法 column="{prop1=col1,prop2=col2}" 指定多个列名以传递给嵌套的 select 语句。这将导致针对目标嵌套选择语句的参数对象设置 prop1 和 prop2。
但是,我所有尝试实现它都会产生异常
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class java.lang.Integer with invalid types () or values (). Cause: java.lang.NoSuchMethodException: java.lang.Integer.<init>()
集合(位于另一个 ResultsMap 中)是:
<collection property="foos" ofType="FooObject"
column="{param1=user_id,param2=foo_id}" select="getFoosByUser" >
<id property="userId" column="user_id" />
<id property="foo" column="foo_id" />
<result property="fooName" column="foo_name" />
</collection>
它应该返回一个 Foo 对象的 ArrayList。复合键是 user_id 和 foo_id。选择查询是:
<select id="getFoosByUser" parameterType="Integer" resultType="FooObject">
SELECT
user_id AS userId,
foo_id AS fooId,
foo_name AS fooName
FROM foo_table
WHERE user_id = #{param1}
AND foo_id = #{param2}
</select>
如果我只使用一个参数,查询可以正常工作,例如删除了foo_id=#{param2},然后在集合中使用column=user_id,但我无法弄清楚如何为两个键正确构造列属性。有什么想法吗?
【问题讨论】:
标签: mybatis composite-key