【问题标题】:Failed to instantiate java.util.List using constructor NO_CONSTRUCTOR with arguments无法使用带参数的构造函数 NO_CONSTRUCTOR 实例化 java.util.List
【发布时间】:2026-01-31 13:25:01
【问题描述】:

我的 MongoDB 数据是这样的:

{
  "college": [
    {
      "batch": {
        "subject": [
          {
            "name": "DBA"
          }
        ],
        "name": "BBA",
        "year": "2016"
      }
    },
    {
      "batch": [
        {
          "subject": [
            {
              "name": "ECO"
            }
          ],
          "name": "BCA",
          "year": "2016"
        },
        {
          "subject": [
            {
              "name": "ECO"
            }
          ],
          "name": "BCA",
          "year": "2016"
        },
        {
          "subject": [
            {
              "name": "ECO"
            }
          ],
          "name": "BCA",
          "year": "2016"
        }
      ]
    }
  ]
}

我正在尝试使用 spring data MongoDB 从 MongoDB 中获取所有数据。我为“College”和“Batch”创建了实体类。似乎批处理作为对象形式在一个数组中,因此它返回“无法使用带参数的构造函数 NO_CONSTRUCTOR 实例化 java.util.List”。无论如何要解决这个问题? TIA

我的实体类:

@Document(collection = "college")
public class College {
    private List<Batch> batch;

    public List<Batch> getBatch() {
        return batch;
    }

    public void setBatch(List<Batch> batch) {
        this.batch = batch;
    }
}

并使用 mongoRepository 获取数据

for (College college: collegeRepository.findAll())

【问题讨论】:

  • 我认为这是不可能的。无论如何,检查这个。这可能会给你一些想法*.com/questions/41029618/…
  • 您在 DB 中显示的数据和您编写的类完全不匹配。您对它们进行了错误的建模,并且数据库中的数据根本不正确。该结构应该适合在应用层中将它们作为实体处理。

标签: mongodb mongodb-query spring-data-mongodb


【解决方案1】:

根据您在 DB 中的数据,以下是您可以创建的类

  public class College {
    List<Batch> batches;
    String name;
}

public class Batch {
    List<Subject> subjects;
    String name;
    String year;
}

public class Subject {
    String name;
}

以上类可以读取/写入以下格式的值到 mongoDB

{
    "name": "My College",
    "batches": [
        {
            "name": "BCA",
            "year": "2016",
            "subjects": [
                {
                    "name": "ECO"
                },
                {
                    "name": "EBC"
                },
                {
                    "name": "DFG"
                }
            ]
        },
          {
            "name": "MBA",
            "year": "2018",
            "subjects": [
                {
                    "name": "ABC"
                },
                {
                    "name": "DEF"
                },
                {
                    "name": "GHI"
                }
            ]
        }
    ]
}

【讨论】: