2014-02-07 4 views
1

Mongo DB 1.3.3에서 Spring 데이터를 사용하고 중첩 된 객체 중 하나가 abstract 유형 인 문서를 가져 오는 중에 예외가 발생합니다. User 클래스를 구체적으로 변경하면 예외가 throw되지 않고 코드가 정상적으로 작동합니다.MongoDB에서 추상 클래스를 인스턴스화하는 중 예외가 발생했습니다.

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" 
} 
} 

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; 
} 

코드 :

Query searchQuoteQuery = new Query(Criteria.where("account.leadDealerAccount"). is(066418)); 
List<Quote> mongoTemplate.find(searchQuoteQuery , Quote.class); 
[2/7/14 12:54:14:019 CST] 00000032 SystemErr R org.springframework.data.mapping.model.MappingInst antiationException: Failed to instantiate com.deere.mp.common.domain.User using constructor public com.deere.mp.common.domain.User() with arguments 
[2/7/14 12:54:14:020 CST] 00000032 SystemErr R at org.springframework.data.convert.ReflectionEntityI nstantiator.createInstance(ReflectionEntityInstantiator.java:78) 
[2/7/14 12:54:14:020 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.convert.Mapp ingMongoConverter.read(MappingMongoConverter.java:243) 
[2/7/14 12:54:14:020 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.convert.Mapp ingMongoConverter.read(MappingMongoConverter.java:223) 
[2/7/14 12:54:14:020 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.convert.Mapp ingMongoConverter.readValue(MappingMongoConverter.java:1050) 
[2/7/14 12:54:14:020 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.convert.Mapp ingMongoConverter.access$100(MappingMongoConverter.java:77) 
[2/7/14 12:54:14:020 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.convert.Mapp ingMongoConverter$MongoDbPropertyValueProvider.get PropertyValue(MappingMongoConverter.java:999) 
[2/7/14 12:54:14:020 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.convert.Mapp ingMongoConverter.getValueInternal(MappingMongoConverter.java:755) 
[2/7/14 12:54:14:020 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.convert.Mapp ingMongoConverter$1.doWithPersistentProperty(MappingMongoConverter.java:256) 
[2/7/14 12:54:14:020 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.convert.Mapp ingMongoConverter$1.doWithPersistentProperty(MappingMongoConverter.java:249) 
[2/7/14 12:54:14:020 CST] 00000032 SystemErr R at org.springframework.data.mapping.model.BasicPersis tentEntity.doWithProperties(BasicPersistentEntity.java:257) 
[2/7/14 12:54:14:020 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.convert.Mapp ingMongoConverter.read(MappingMongoConverter.java:249) 
[2/7/14 12:54:14:021 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.convert.Mapp ingMongoConverter.read(MappingMongoConverter.java:223) 
[2/7/14 12:54:14:021 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.convert.Mapp ingMongoConverter.read(MappingMongoConverter.java:187) 
[2/7/14 12:54:14:021 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.convert.Mapp ingMongoConverter.read(MappingMongoConverter.java:183) 
[2/7/14 12:54:14:021 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.convert.Mapp ingMongoConverter.read(MappingMongoConverter.java:77) 
[2/7/14 12:54:14:021 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.MongoTemplat e$ReadDbObjectCallback.doWith(MongoTemplate.java:1975) 
[2/7/14 12:54:14:021 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.MongoTemplat e.executeFindMultiInternal(MongoTemplate.java:1671) 
[2/7/14 12:54:14:021 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.MongoTemplat e.doFind(MongoTemplate.java:1496) 
[2/7/14 12:54:14:021 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.MongoTemplat e.doFind(MongoTemplate.java:1480) 
[2/7/14 12:54:14:021 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.MongoTemplat e.find(MongoTemplate.java:527) 
[2/7/14 12:54:14:021 CST] 00000032 SystemErr R at org.springframework.data.mongodb.core.MongoTemplat e.find(MongoTemplate.java:518) 
[2/7/14 12:54:14:021 CST] 00000032 SystemErr R at com.deere.mp.quote.dao.impl.QuoteDAOImpl.findByUse rId(QuoteDAOImpl.java:137) 
[2/7/14 12:54:14:021 CST] 00000032 SystemErr R at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[2/7/14 12:54:14:021 CST] 00000032 SystemErr R at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) 
[2/7/14 12:54:14:021 CST] 00000032 SystemErr R at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 

답변

-2

그것은 스택 트레이스 (뿐만 아니라 자바 기본 논리)에서 이렇게 아주 분명하다 자바의 추상 클래스를 인스턴스화 할 수 없습니다 :예외 마지막 줄은 다음과 같은 예외가 발생합니다. 그러면 스프링 데이터 API가 JSON 데이터를 인스턴스화 할 수없는 클래스로 채우는 것을 어떻게 기대합니까 ?? Spring은 mongodb로부터 데이터를 가져오고 지정된 클래스의 POJO에 동일한 데이터를 푸시하려고 시도합니다 (귀하의 경우 추상적이고 인스턴스화 할 수 없습니다).

+0

예상되는 동작을 달성 할 수있는 방법이 있습니까? – Nayan

관련 문제