Сделайте Hibernate счастливым с помощью "uuid" Liquibase

Используя JPA/Hibernate, определяем сущность с помощью следующего поля:

@Id
@Column(length = 36)
private String id = UUID.randomUUID().toString();

Используя Liquibase, зная, что это UUID, в журнале изменений есть следующее:

<column name="id" type="uuid">
...

Нам нравится использовать Hibernate's hbm2ddl.auto=validate/ddl-auto=validate на старте. Теперь для MySQL Hibernate будет думать, что это должно быть VARCHARпока мы знаем, что длина фиксирована, CHAR, который Liquibase может получить из type="uuid" (на самом деле, Liquibase определяет это в своем UUIDType). Таким образом, валидация Hibernate при запуске будет спорить о разнице типов между VARCHAR а также CHAR,

Как исправить эту проблему каноническим способом? Канонические средства для меня:

  • Не идите на компромисс type="uuid" в журнале изменений Liquibase
  • Не использовать @Column(..., columnDefinition="CHAR") так как это не совсем переносимо

(В настоящее время я работаю над этим, имея собственную переопределение Liquibase's UUIDType и сделать колонку VARCHAR, но CHAR кажется, лучше, строго говоря, в любом случае. И это похоже на излишнее решение.)

Ясно, что это не является непосредственной проблемой (так как у меня есть обходной путь), но я хотел бы узнать, как сделать это правильно.

0 ответов

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