Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试实例化抽象类时MongoDB中出现异常_Mongodb_Spring Data_Bson - Fatal编程技术网

尝试实例化抽象类时MongoDB中出现异常

尝试实例化抽象类时MongoDB中出现异常,mongodb,spring-data,bson,Mongodb,Spring Data,Bson,我们在Mongo DB 1.3.3中使用Spring数据,在检索其中一个嵌套对象为抽象类型的文档时出现异常。如果我们将用户类更改为具体的,则不会引发异常,代码也可以正常工作 BSON结构: { "_id" : { "$oid" : "52d99dec88c6bd5da9c05a86"}, "_class": "com.xyz.Quote" , "name" : "sssds" , "quoteNumber" : 1006 , "account" : {

我们在Mongo DB 1.3.3中使用Spring数据,在检索其中一个嵌套对象为抽象类型的文档时出现异常。如果我们将用户类更改为具体的,则不会引发异常,代码也可以正常工作

BSON结构:

{ "_id" : { "$oid" : "52d99dec88c6bd5da9c05a86"},
     "_class": "com.xyz.Quote" , 
     "name" : "sssds" ,
     "quoteNumber" : 1006 ,
      "account" : { "accountNumber" : "060926" ,
                     "phone" : [ ] , "fax" : [ ] ,
                 "leadDealerAccount" : "066418" , 
................................................
"quoteCreatedBy" : { "_class" : "com.xyz.DealerUser" , 
                     "lastName" : "TILLMAN" ,
                    "firstName" : "TIMOTHY" ,
                   "middleName" : "M" 
}
}
Query searchQuoteQuery = new Query(Criteria.where("account.leadDealerAccount"). is(066418));
List<Quote> mongoTemplate.find(searchQuoteQuery , Quote.class);
POJO课程:

public abstract class User {
   private String lastName;
   private String firstName; 
} 

public class DealerUser extends User {
   private Account primaryAccount;
}

public class AnotherUser extends User{
   private List<Address> availableAddresses;
}

public class Quote {
    private User quoteCreatedBy;
}

从stacktrace(以及Java基本逻辑)可以明显看出,您无法在Java中实例化抽象类。那么,您希望Spring数据API如何将JSON数据填充到无法实例化的类中呢??Spring将从mongodb获取数据,并尝试将相同的数据推送到指定类的POJO中(在您的情况下,POJO是抽象的,无法实例化)。

从stacktrace(以及Java基本逻辑)可以明显看出,您无法在Java中实例化抽象类。那么,您希望Spring数据API如何将JSON数据填充到无法实例化的类中呢??Spring将从mongodb获取数据,并尝试将相同的数据推送到指定类的POJO中(在您的情况下,POJO是抽象的,不能实例化)。

@BsonDiscriminator注释您的类:

@org.bson.codecs.pojo.annotations.BsonDiscriminator()
public class DealerUser {}
public class Some class {

    @org.bson.codecs.pojo.annotations.BsonProperty(useDiscriminator = true)
    private User user;

}
此外,如果
用户
类是其他类的属性/字段,则必须使用@BsonProperty(useDiscriminator=true)注释该字段:

@org.bson.codecs.pojo.annotations.BsonDiscriminator()
public class DealerUser {}
public class Some class {

    @org.bson.codecs.pojo.annotations.BsonProperty(useDiscriminator = true)
    private User user;

}

@BsonDiscriminator注释您的类:

@org.bson.codecs.pojo.annotations.BsonDiscriminator()
public class DealerUser {}
public class Some class {

    @org.bson.codecs.pojo.annotations.BsonProperty(useDiscriminator = true)
    private User user;

}
此外,如果
用户
类是其他类的属性/字段,则必须使用@BsonProperty(useDiscriminator=true)注释该字段:

@org.bson.codecs.pojo.annotations.BsonDiscriminator()
public class DealerUser {}
public class Some class {

    @org.bson.codecs.pojo.annotations.BsonProperty(useDiscriminator = true)
    private User user;

}

有没有办法达到预期的行为?有没有办法达到预期的行为?