5

नीचे के साथ वस्तुओं से युक्त Question 13832188 लिए एक अनुवर्ती सवाल है। यदि @PersistenceConstructor तर्कों के नाम @Field और @Value एनोटेशन का उपयोग कर सदस्य चर के नामों से मेल नहीं खाते हैं, तो भी मैं सभी ऑब्जेक्ट्स चरम प्रकारों का उपयोग कर सकता हूं।बने वस्तुओं वसंत-डेटा-MongoDB

हालांकि, मुझे MappingInstantiationException मिलता है जब मैं अन्य वस्तुओं वाले वस्तुओं को जारी रखने की कोशिश करता हूं। मेरे प्रश्न:

  • क्या यह spring-data-mongodb में कोई बग है या क्या मैं कुछ गलत कर रहा हूं?
  • क्या बदलने की जरूरत है ताकि मैं ऑब्जेक्ट वाली वस्तुओं को सही ढंग से जारी रख सकूं?

@Document 
class PrimitiveContainer { 

    @Field("property") 
    private final int m_property; 

    @PersistenceConstructor 
    public PrimitiveContainer(@Value("#root.property") int a_property) { 
     m_property = a_property; 
    } 

    public int property() { 
     return m_property; 
    } 
} 

@Document 
class ObjectContainer { 

    @Field("property") 
    private final PrimitiveContainer m_property; 

    @PersistenceConstructor 
    public ObjectContainer(@Value("#root.property") PrimitiveContainer a_property) { 
     m_property = a_property; 
    } 

    public PrimitiveContainer property() { 
     return m_property; 
    } 
} 

** अद्यतन: ** मजे की बात है, "संपत्ति" के अलावा कुछ करने के लिए @Field एनोटेशन में स्ट्रिंग को बदलने या हटाने के

org.springframework.data.mapping.model.MappingInstantiationException: Could not instantiate bean class [com.recorder.TestRecorder2$ObjectContainer]: Illegal arguments for constructor; nested exception is java.lang.IllegalArgumentException: argument type mismatch 
    at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:77) 
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:229) 
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:209) 
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:173) 
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:169) 
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:72) 
    at org.springframework.data.mongodb.core.MongoTemplate$ReadDbObjectCallback.doWith(MongoTemplate.java:1820) 
    at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:1542) 
    at org.springframework.data.mongodb.core.MongoTemplate.findAll(MongoTemplate.java:1064) 
    at com.recorder.TestRecorder2.testObjectContainer(RecorderTest2.java:63) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.recorder.TestRecorder2$ObjectContainer]: Illegal arguments for constructor; nested exception is java.lang.IllegalArgumentException: argument type mismatch 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:158) 
    at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:75) 
    ... 34 more 
Caused by: java.lang.IllegalArgumentException: argument type mismatch 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147) 
    ... 35 more 

मेरे PrimitiveContainer और ObjectContainer वर्गों के नीचे सूचीबद्ध हैं @Field एनोटेशन पूरी तरह से ObjectContainerm_property के लिए वसंत-डेटा-मोंगो-डीबी की संपत्ति को मेरे लगातार ObjectContainer कक्षा को फिर से चालू करने की अनुमति देता है। मुझे समझ में नहीं आता कि यह क्यों काम करता है। क्या किसी के भी पास कोई सुझाव है?

+0

स्रोत दस्तावेज़ क्या दिखते हैं? अर्थात। डेटाबेस के अंदर दस्तावेज़ कैसा दिखता है? –

+0

{"_id": ऑब्जेक्टआईडी ("50ca271c4566a2b08f2d667a"), "_class": "com.recorder.TestRecorder2 $ ऑब्जेक्टकंटनर", "संपत्ति": {"संपत्ति": 100}} –

उत्तर

2

आपको लगता है कि एक बग मिला है। पहले स्पेल अभिव्यक्ति मूल्यांकन के परिणामस्वरूप मान DBObject है और वास्तव में पैरामीटर प्रकार में अनुवाद नहीं किया गया है। मेरे यहां पहले से ही कुछ कोड है जो स्थानीय रूप से ठीक करता है। क्या आप इसे बग के रूप में फ़ाइल करने के लिए स्प्रिंग डेटा मोंगोडीबी के खिलाफ टिकट बनाना चाहते हैं?

+0

मैंने [DATAMONGO-592] बनाया है (इस मुद्दे को ट्रैक करने के लिए https://jira.springsource.org/browse/DATAMONGO-592)। आपकी सहायता के लिए धन्यवाद!! –

+0

मैंने यह भी पाया कि मैं संपत्ति को उन वस्तुओं को जारी नहीं रख सकता जिनमें प्राचीन अरण शामिल हैं। क्या वह बग है जो मुझे उन वस्तुओं को सही ढंग से बनाए रखने से रोक रही है जिसमें ऑब्जेक्ट्स एक ही बग है जो मुझे आदिम सरणी वाले ऑब्जेक्ट्स को सही ढंग से बनाए रखने से रोक रहा है? [स्टैक ओवरव्लो 13884637] में सरणी समस्या का विवरण देखें (http://stackoverflow.com/questions/13884637) –

संबंधित मुद्दे