InstantiationError Абстрактный класс с универсальным типом Spring Data Mongo - PullRequest
0 голосов
/ 22 октября 2018

Hellooo ...

У меня есть несколько классов:

1.TermValue , который распространяется на Value<T>

public class TermValue extends Value<String> {
    public static String CONTENT_ATTR = "content";


    private static final long serialVersionUID = 1L;


    protected static final String ID_EDEFAULT = null;

  :
  :
}

2. Value<T>

public abstract class Value<T> implements Serializable {

    public static String VALUE_ATTR = "value";

    public static String DISPLAY_VALUE_ATTR = "displayValue";

    public static String DISPLAY_NAME_ATTR = "displayName";

  :
  :
}

3.Опция

public class Option implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    protected List<Value<?>> values;
  :
  :
}

В Spring Data Mongo я получаю сообщение об ошибке:

java.lang.InstantiationError: id.co.bippo.commerce.share.Value
    at id.co.bippo.commerce.share.Value_Instantiator_kj58jw.newInstance(Unknown Source)
    at org.springframework.data.convert.ClassGeneratingEntityInstantiator$EntityInstantiatorAdapter.createInstance(ClassGeneratingEntityInstantiator.java:224)
    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.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.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$ReadDocumentCallback.doWith(MongoTemplate.java:2785)
    at org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:2401)
    at org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:2193)
    at org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:716)
    at org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:704)
    at id.co.bippo.commerce.mongo.MongoConnectionTest.show_simplified_product_variant(MongoConnectionTest.java:103)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)

Но, если я изменю тип values в классе Опция (№ 3) должно быть TermValue (до Value<T>), это OK , без ошибок.

Как я могу решить (или альтернативно) проблемы?

1 Ответ

0 голосов
/ 02 мая 2019

Попробуйте сохранить данные с помощью кода Java, тогда вы не столкнетесь с этой проблемой.

Это поле _class , которое требуется в базе данных для сопоставления с правильной реализацией.Это _class поле со значением имени класса (как показано ниже) создается автоматически, когда вы вводите данные, генерирующие Java, но при вводе данных вручную мы не добавляем их, и это вызывает ошибку создания экземпляра.

Я также столкнулся с этой проблемой с моим классом lms (абстрактный класс), класс LTIConfiguration реализовывал lms.

Структура базы данных Mongo с _class:

{
    "providers" : {
        "lti" : {
            "integrationConfiguration" : {
                "launchUrl" : "",
                "key" : "",
                "secret" : "",
                "_class" : "com.projectName.common.model.configuration.LTIConfiguration"
            }
        }
    }
}
...