gpt4 book ai didi

Java Spring + MongoTemplate 无法检索对象列表

转载 作者:行者123 更新时间:2023-12-02 02:02:43 28 4
gpt4 key购买 nike

我有一个链接到 MongoDB 集合的 Java 类:

@Document(collection = "my_collection")
public class Ev extends MyDTO{
@Id
private String id;
@Indexed
private String sessionId;
private List<String> findings;
}

我必须改变其中的发现

    private List<MyObject> findings;

声明为

public class MyObject {
private String find;
private String description;
private int number;
private List<SecondaryObj> details;
}

这是构造函数

public MyObject(String find, int number) {
super();
this.find= find;
this.number= number;
}

public MyObject(String find, int number, List<SecondaryObj> details) {
super();
this.find= find;
this.details = details;
this.number= number;
}

所以在mongoDB中我有类似的情况

{
"_id" : ObjectId("5b487a2667a1aa18f*******"),
"sessionId" : "abc123mySessionId",
"findings" : [
{
"find" : "HTTPS",
"description" : "I found HTTPS",
"number" : 10,
"details": [
{"a":"1", "b":"2"},
{"a":"2", "b":"3"}
]
},
{
"find" : "NAME",
"description" : "I found name",
"number" : 3,
"details": [
{"a":"1", "b":"2"},
{"a":"2", "b":"3"}
]
}
]
}

我显然更新了所有方法以匹配新数据集,但如果我尝试检索

Query searchQuery = new Query(Criteria.where("sessionId").is("abc123mySessionId"));
Ev result = mongoTemplate.findOne(searchQuery, Ev.class);

我收到此错误

Request processing failed; nested exception is org.springframework.data.mapping.model.MappingInstantiationException: Failed to instantiate com.my.project.domain.MyObject using constructor NO_CONSTRUCTOR with arguments

有根本原因

java.lang.NoSuchMethodException: om.my.project.domain.MyObject.<init>()

我正在使用spring-data-mongodb版本2.0.8mongo-java-driver版本3.8.0

我认为我应该在某个地方声明 MyObject,但我在 Spring 中还很陌生,所以我正在以一种盲目的方式尝试......有什么建议吗?

最佳答案

您有两个非零参数构造函数,Spring 不知道调用哪一个。它尝试调用无参数构造函数,但您的类没有该构造函数。检查 Spring Data Mongo docs

您可以创建无参数构造函数并使用 @PersistenceConstructor 注解对其进行标记。这样Spring就调用它来创建一个对象,并根据文档字段名称通过反射设置字段,因此不需要setter。

关于Java Spring + MongoTemplate 无法检索对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51327475/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com