Как добавить тип с ключом в hibernate 5.3

#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, вам следует сообщить об ошибке регрессии.