java - Mybatis映射嵌套类时出现 "java.lang.IllegalArgumentException: Result Maps collection already contains value for"错误

标签 java mybatis

尝试在嵌套类上执行某些 XML 映射时,我收到 java.lang.IllegalArgumentException: Result Maps 集合已包含 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>

如果我将 ObjectB 类置于 ObjectA 类之外,则映射工作正常。但问题是我不想那样做。我想把它嵌套起来。

谢谢

最佳答案

我在这里看到两个问题:

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

关于java - Mybatis映射嵌套类时出现 "java.lang.IllegalArgumentException: Result Maps collection already contains value for"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28051240/

相关文章:

java - 为什么 Spark 应用程序失败并显示 "IOException: (null) entry in command string: null chmod 0644"?

java - 提高 BigDecimal 到双转换的性能

java - 欧拉计划 N# 8 JAVA

mybatis - 如何使myBatis选择结果(列表)设置为对象的属性?

java - 使用 getGenerateKeys 获取更新记录主键失败 - MyBatis

java - 使用 spring 缓慢关闭 myBatis 中的 SqlSession

java - Jasypt - 使用不同的加密器进行加密和解密

java - 选项卡布局 : Lag when switching fragments

spring - 使用 myBatis 从数据库中以 byte[] 的形式获取 blob

java - 夏令时的 JDBC Mysql 时区问题