Hibernate Envers с настраиваемым типом для свойства

У меня сейчас проблема с настройкой Hibernate Envers в моем приложении Springboot. У меня есть перечисление в одной из моих моделей, которое имеет тип перечисления, а в моей базе данных PostgreSQL столбец имеет тип «Тип».

недвижимость:

@Enumerated(STRING)
@Type(type = "pgsql_enum")
private VehicleTypes vehicleType;

класс модели для этого свойства аннотируется:

@Entity(name = "cars")
@Audited
@TypeDef(name = "pgsql_enum", typeClass = PostgreSqlEnumType.class)

а настраиваемый тип PostgreSqlEnumType:

public class PostgreSqlEnumType extends EnumType {
@Override
public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session) throws HibernateException, SQLException {
    if (value == null) {
        st.setNull(index, OTHER);
    } else {
        st.setObject(index, value.toString(), OTHER);
    }
}}

К сожалению, когда я собираю это, я получаю следующую ошибку:

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:954)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:882)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:360)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:382)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:371)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:336)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
... 39 more
Caused by: org.hibernate.MappingException: Unable to instantiate custom type: <myPackage>.PostgreSqlEnumType
    at org.hibernate.type.TypeFactory.custom(TypeFactory.java:217)
    at org.hibernate.type.TypeFactory.custom(TypeFactory.java:203)
    at org.hibernate.type.TypeFactory.byClass(TypeFactory.java:117)
    at org.hibernate.type.TypeResolver.heuristicType(TypeResolver.java:112)
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:416)
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:398)
    at org.hibernate.mapping.Property.isValid(Property.java:225)
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:595)
    at org.hibernate.mapping.RootClass.validate(RootClass.java:265)
    at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:329)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:443)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:879)
    ... 46 more
Caused by: java.lang.NullPointerException
    at org.hibernate.type.EnumType.getAnnotation(EnumType.java:134)
    at org.hibernate.type.EnumType.getEnumType(EnumType.java:125)
    at org.hibernate.type.EnumType.setParameterValues(EnumType.java:80)
    at org.hibernate.type.TypeFactory.injectParameters(TypeFactory.java:152)
    at org.hibernate.type.TypeFactory.custom(TypeFactory.java:213)
    ... 57 more

Я не могу перейти в спящий режим, чтобы распознать этот нестандартный тип. До внедрения Envers это прекрасно компилировалось.

версия:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-envers</artifactId>
  <version>5.1.0.Final</version>
</dependency>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-java8</artifactId>
  <version>5.1.0.Final</version>
</dependency>

Определение типа PostgreSQL:

CREATE TYPE customer_cars.vehicle_types AS ENUM
('CAR', 'PUP');

Извините за все отвалы, любая помощь будет принята с благодарностью!

Спасибо!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
707
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта проблема была решена с помощью HHH-12304.

Вам необходимо обновить до версии, которая включает это исправление, чтобы, к сожалению, избежать вашей проблемы. Поскольку это не было перенесено на 5.1, вам необходимо рассмотреть один из последних выпусков 5.2.x, который включает это исправление.

Другие вопросы по теме