Mybatis" java.lang.IllegalArgumentException:结果地图集合已包含"的值映射嵌套类时出错

时间:2015-01-20 17:11:44

标签: java mybatis

我收到了java.lang.IllegalArgumentException:结果映射集合已经包含“尝试在嵌套类上执行某些XML映射时出错”的值:

我有以下嵌套类结构:

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

答案 0 :(得分:0)

我在这里看到两个问题:

  1. 内部类名称与其周围类的分隔符为$而不是.。因此,com.test.ObjectA.ObjectB不是com.test.ObjectA$ObjectB,而是public static class ObjectB...
  2. 您的ObjectB没有默认构造函数,也没有指定构造函数映射。除了显式参数之外,请记住内部类总是将其外部类作为隐式构造函数参数,除非您将该类声明为静态({{1}})。