Mybatis "java.lang.IllegalArgumentException: Result Maps collection already contains value for&
Posted
技术标签:
【中文标题】Mybatis "java.lang.IllegalArgumentException: Result Maps collection already contains value for" 映射嵌套类时出错【英文标题】:Mybatis "java.lang.IllegalArgumentException: Result Maps collection already contains value for" error when mapping nested classes 【发布时间】:2015-03-19 00:42:12 【问题描述】:尝试对嵌套类进行一些 XML 映射时,我收到 java.lang.IllegalArgumentException: Result Maps collection has value for" 错误:
我有以下嵌套类结构:
package com.test;
public class ObjectA
private List<ObjectB> entries;
public ObjectA(List<ObjectB> entries)
this.entries = entries;
public void setEntries(List<ObjectB> entries)
this.entries = entries;
public List<ObjectB> getEntries()
return this.entries;
public class ObjectB
private String param1;
public ObjectB(String param1)
this.param1 = param1;
public void setParam1(String param1)
this.param1 = param1;
public String getParam1()
return this.param1;
xml 映射器看起来像这样:
<resultMap id="ObjectA" type="com.test.ObjectA">
<collection property="entries" resultMap="Entries"/>
</resultMap>
<resultMap id="Entries" type="com.test.ObjectA.ObjectB">
<result property="param1" column="column1"/>
</resultMap>
如果我在 ObjectA 类之外使用 ObjectB 类,则映射工作正常。但问题是我不想那样做。我想让它嵌套。
谢谢
【问题讨论】:
我认为您可以为错误添加完整的堆栈跟踪。 【参考方案1】:我在这里看到两个问题:
-
内部类名称与其周围类的分隔符是
$
,而不是.
。所以你的路径应该是com.test.ObjectA$ObjectB
,而不是com.test.ObjectA.ObjectB
。
您的 ObjectB 没有默认构造函数,并且您没有指定构造函数映射。除了显式参数之外,请记住,内部类始终将其外部类作为隐式构造函数参数,除非您将该类声明为静态 (public static class ObjectB...
)。
【讨论】:
以上是关于Mybatis "java.lang.IllegalArgumentException: Result Maps collection already contains value for&的主要内容,如果未能解决你的问题,请参考以下文章