Сделайте 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
кажется, лучше, строго говоря, в любом случае. И это похоже на излишнее решение.)
Ясно, что это не является непосредственной проблемой (так как у меня есть обходной путь), но я хотел бы узнать, как сделать это правильно.