为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

绝地无双 2021-05-02 08:17:28
我有一个链接到MongoDB集合的Java类:@Document(collection = "my_collection")public class Ev extends MyDTO{    @Id    private String id;    @Indexed    private String sessionId;    private List<String> findings;}我不得不改变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 version 2.0.8和mongo-java-driver version 3.8.0我想我应该在某个地方声明MyObject,但是我在Spring还是很新,所以我以一种盲目的方式进行尝试...有什么建议吗?
查看完整描述

2 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

您有两个非零参数的构造函数,而Spring不知道要调用哪个。它尝试调用no-args构造函数,但是您的类没有该构造函数。检查Spring Data Mongo文档

您可以创建no-args构造函数,并使用@PersistenceConstructor注释对其进行标记。通过这种方式,Spring调用它来创建对象,并根据文档字段名称通过反射来设置字段,因此不需要设置器。


查看完整回答
反对 回复 2021-05-26
  • 2 回答
  • 0 关注
  • 180 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信