#java #hibernate #kotlin
#java #спящий режим #kotlin
Вопрос:
В моем приложении я хочу зарегистрировать имя для пользовательского типа при объявлении пользовательского диалекта. Я не хочу использовать аннотацию @TypeDef, потому что я хочу, чтобы для тестов, загружаемых при запуске, отображался другой тип, чем в конкретном приложении. До спящего режима 5.3 я бы сделал что-то вроде
class TestCustomH2Dialect : PostgreSQL94Dialect() {
init {
this.registerColumnType(Types.JAVA_OBJECT, "LONGVARCHAR")
}
override fun contributeTypes(typeContributions: TypeContributions, serviceRegistry: ServiceRegistry) {
super.contributeTypes(typeContributions, serviceRegistry)
typeContributions.contributeType(
MyTestType(),
MyClass::class.java.canonicalName,
"MyTestType"
)
}
}
И тогда это объявление работает
@Type(type = "MyTestType")
@Column(name = "test_type", nullable = false)
var testType: TestType,
В Hibernate 5.3 этот метод contributeType устарел, и из-за документации следует использовать версию только с BasicType в качестве параметра. Проблема в том, что когда я пытаюсь его использовать, мой псевдоним для типа не распознается, если я не добавлю @TypeDef или не напишу полный путь к классу в аннотацию @Type. Есть ли какая-то альтернатива?
Комментарии:
1. Ваш
UserType
вклад должен работать без изменений до версии 6.0, когда вся система типов будет обновлена, и почти ни один из старых API не останется. Его удаление — это просто предупреждение на будущее. Если он перестал работать между 5.2 и 5.3, вам следует сообщить об ошибке регрессии.