Java MongoDB存储库-如何注释不是文档的子类?

Java MongoDB存储库-如何注释不是文档的子类?,java,mongodb,spring-repositories,Java,Mongodb,Spring Repositories,我有两门课: @Document(collection="student") public class MongoStudent { @Id private BigInteger id; @Field("name") private String name; @Field("lname") private String lname; @Field("studium") private List<MongoStudium>

我有两门课:

@Document(collection="student")
public class MongoStudent {
    @Id
    private BigInteger id;
    @Field("name")
    private String name;
    @Field("lname")
    private String lname;
    @Field("studium")
    private List<MongoStudium> studium;

 @PersistenceConstructor
    public MongoStudent(BigInteger id,String name,String lname,List<MongoStudium> studium){ 
     this.id = id;
     this.name = name;
     this.lname = lname
     this.studium = studium;

 } 
...etc, getters,setters

public class MongoStudium {

    @Field
    private BigInteger id;
    @Field
    private Date start;
    @Field
    private Date end;
    @Field("course")
    private String course;

@PersistenceConstructor
public MongoStudium(BigInteger id, Date start, Date end, String course) {

    this.id = id;
    this.start = start;
    this.end = end;
    this.course = course;

}

...etc, getters,setters
我想要这个表单中的文档,因为我可以很容易地为这个文档编写查询。问题是mongodb存储库无法从该文档中读取数据。我不明白为什么,因为保存数据没有问题。它给我这样的错误:

{
    "_id": "1006262",
    "name": "Kugujalu",
    "lname": "Najahalovu",
    "studium": [
        {
            "_id": "992",
            "start": {
                "$date": "1998-08-31T22:00:00.000Z"
            },
            "end": {
                "$date": "2003-06-10T22:00:00.000Z"
            },
            "course": "MCH",
        }
    ],
    "_class": "mongodb.MongoStudent"
}
Exception in thread "main" org.springframework.data.mapping.MappingException: No property studium found on entity class mongodb.MongoStudium to bind constructor parameter to!
    at org.springframework.data.mapping.model.PersistentEntityParameterValueProvider.getParameterValue(PersistentEntityParameterValueProvider.java:68)
    at org.springframework.data.mapping.model.SpELExpressionParameterValueProvider.getParameterValue(SpELExpressionParameterValueProvider.java:49)
    at org.springframework.data.convert.ClassGeneratingEntityInstantiator$EntityInstantiatorAdapter.extractInvocationArguments(ClassGeneratingEntityInstantiator.java:248)
    at org.springframework.data.convert.ClassGeneratingEntityInstantiator$EntityInstantiatorAdapter.createInstance(ClassGeneratingEntityInstantiator.java:221)
    at org.springframework.data.convert.ClassGeneratingEntityInstantiator.createInstance(ClassGeneratingEntityInstantiator.java:86)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:273)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:253)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readCollectionOrArray(MappingMongoConverter.java:978)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readValue(MappingMongoConverter.java:1386)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter$MongoDbPropertyValueProvider.getPropertyValue(MappingMongoConverter.java:1335)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readProperties(MappingMongoConverter.java:335)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:297)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:253)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:202)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:198)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:86)
    at org.springframework.data.mongodb.core.MongoTemplate$ProjectingReadCallback.doWith(MongoTemplate.java:2827)
    at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:2446)
    at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:2265)
    at org.springframework.data.mongodb.core.ExecutableFindOperationSupport$ExecutableFindSupport.doFind(ExecutableFindOperationSupport.java:213)
    at org.springframework.data.mongodb.core.ExecutableFindOperationSupport$ExecutableFindSupport.all(ExecutableFindOperationSupport.java:169)
    at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.lambda$getExecution$1(AbstractMongoQuery.java:113)
    at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.execute(AbstractMongoQuery.java:97)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:590)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:578)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:59)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:61)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
    at com.sun.proxy.$Proxy37.findByLname(Unknown Source)
    at sk.upjs.nosql.mongodb.StudentService.writeNames(StudentService.java:39)
    at sk.upjs.nosql.mongodb.ConnectToDB.main(ConnectToDB.java:37)

看起来mongodb存储库遗漏了一些注释。但是在哪里呢?有什么帮助吗?

请尝试将字段名从

private List<MongoStudium> studium;
私有列表研究;

mongoStudium私有列表;
和构造函数

public MongoStudent(BigInteger id,String name,String lname,List<MongoStudium> mongoStudium){
public MongoStudent(biginger id、字符串名称、字符串名称、列表mongoStudium){

可能您删除了MongoStudium中的属性“studium”,但DB中存在该属性。因此Spring尝试映射到一个没有此字段的对象中


您必须在db中删除MongoStudium的所有记录中的字段“studium”,或者在db中清除整个集合。

您可以在代码中添加构造函数吗?我相信这有助于理解发生了什么。这并不能解决我的问题,但它开始编写另一个错误,这次我发现了问题所在。谢谢:)您欢迎:D可能是隐藏问题的不同名称。请,如果您找到解决方案,请与我们共享。好的,解决方案是删除所有数据库并创建一个新的。这很奇怪,但看起来它将数据保存到新文档中并从旧文档中读取数据。我真的不知道为什么。可能是因为在此之前,我有2个文档使用相同名称创建数据库?Mongoception!哦,天哪!可能吧。看起来它将数据保存到新文档中,并从旧文档中读取数据,因为当我重命名它时,它根本不需要工作。我删除了所有数据库并重新创建它,问题得到了解决。
public MongoStudent(BigInteger id,String name,String lname,List<MongoStudium> mongoStudium){