Отображение порядкового перечисления с помощью Hibernate 6.5

Я обновляю Hibernate с 6.1.7 до 6.5.2, в моих объектах много столбцов перечислений, отмеченных значком @Enumerated(EnumType.ORDINAL). Моя кодовая база должна работать как с Oracle, так и с SQL Server.

Проблема заключается в изменении в Hibernate отображения перечислений с SMALLINT на TINYINT (если перечисления имеют всего несколько значений). У меня уже есть фиксированная схема БД для Oracle как NUMBER(10, 0) и для SQL Server как INT для порядковых перечислений.

Кажется, я не могу найти решение для сопоставления перечислений с аннотациями, которые бы работали для обеих БД одновременно. В настоящее время это работает для Oracle, но проверка схемы для SQL Server выдает:

Проверка схемы: в столбце [XXXX] в таблице [XXX] обнаружен неверный тип столбца; найдено [int (Types#INTEGER)], но ожидается [smallint (Types#SMALLINT)]

Есть идеи, как это исправить?

Я попробовал добавить @JdbcTypeCode(Types.SMALLINT), те же ошибки. Также @Column(columnDefinition = "int"), который исправляет SQL Server, но Oracle начинает сбоить при проверке схемы:

Проверка схемы: обнаружен неправильный тип столбца в столбце [definitionRef_targetType] в таблице [m_acc_cert_campaign]; найдено [число (Types#NUMERIC)], но ожидается [int (Types#TINYINT)]

🤔 А знаете ли вы, что...
Java поддерживает многопоточность, что позволяет создавать многозадачные приложения.


1
54
1

Ответ:

Решено

Решение состоит в том, чтобы аннотировать это следующим образом:

@JdbcType(IntegerJdbcType.class)
@Enumerated(EnumType.ORDINAL)

@JdbcType заставит SqlTypes.SMALLINT, как это было ранее реализовано непосредственно в EnumJavaType.