Я пытаюсь десериализовать перечисляемые данные из базы данных 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]
Любая подсказка приветствуется!