Перечисления сериализации со значением из OracleDB с использованием Джексона - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь десериализовать перечисляемые данные из базы данных Oracle с помощью Jackson, работая с Hibernate & JPA.

Мое намерение состоит в том, чтобы получить JSON, как это:

[{
    "id": 1,
    "name": "some name",
    "type": "X"
},
{
    "id": 2,
    "name": "some other name",
    "type": "Y"
}]

Класс сущности:

@Entity
public class A {
    @Id
    private long id;
    @Column
    private String name;
    @Column
    private EnumType type;
}

Данные в БД хранятся так:

id NUMBER(10) например 111

name VARCHAR(20) например "some n"

type VARCHAR(1) с точным значением "X" или "Y"

Класс enum:

public enum EnumType {
    TYPE_X("X"),
    TYPE_Y("Y")

    private String symbol;

    EnumType(String symbol) {
        this.symbol = symbol;
    }

    public String getSymbol() {
        return symbol;
    }
}

Использование ObjectMapper:

new ObjectMapper()
            .registerModule(new Jdk8Module())
            .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
            .writerWithDefaultPrettyPrinter()
            .writeValue(new File(*FILE_PATH*), object);

объект List<Object>

Подробности конфигурации БД:

spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect

Я пытался использовать @JsonValue, @JsonDeserialize, @JsonSerialize, пользовательский десериализатор, пользовательский сериализатор и многое другое.

Наконец, я получаю сообщение об ошибке:

Caused by: java.sql.SQLException: Fail to convert to internal representation
at oracle.jdbc.driver.CharCommonAccessor.getInt(CharCommonAccessor.java:123) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
at oracle.jdbc.driver.T4CVarcharAccessor.getInt(T4CVarcharAccessor.java:524) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
at oracle.jdbc.driver.GeneratedStatement.getInt(GeneratedStatement.java:217) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
at oracle.jdbc.driver.GeneratedScrollableResultSet.getInt(GeneratedScrollableResultSet.java:573) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
at oracle.jdbc.driver.GeneratedResultSet.getInt(GeneratedResultSet.java:1350) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
at com.zaxxer.hikari.pool.HikariProxyResultSet.getInt(HikariProxyResultSet.java) ~[HikariCP-3.2.0.jar:na]
at org.hibernate.metamodel.model.convert.internal.OrdinalEnumValueConverter.readValue(OrdinalEnumValueConverter.java:58) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.type.EnumType.nullSafeGet(EnumType.java:250) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.type.CustomType.nullSafeGet(CustomType.java:119) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.type.AbstractType.hydrate(AbstractType.java:91) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:3007) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.loadFromResultSet(EntityReferenceInitializerImpl.java:305) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]

Любая подсказка приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...