1

使用 JPA/Hibernate,定义具有以下字段的实体:

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

使用 Liquibase,知道这是一个 UUID,在更改日志中有以下内容:

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

我们喜欢在启动时使用 Hibernate 的hbm2ddl.auto=validate/ 。ddl-auto=validate现在,对于 MySQL,Hibernate 会认为这应该是VARCHAR,而我们知道长度是固定的 ,CHARLiquibase 可以从中派生type="uuid"(实际上,Liquibase 在它的 中定义了这个UUIDType)。因此,启动时的 Hibernate 验证将对VARCHAR和之间的类型差异犹豫不决CHAR

如何以规范的方式解决此问题?规范对我来说意味着:

  • 不要type="uuid"在 Liquibase 更改日志中妥协
  • 不要使用@Column(..., columnDefinition="CHAR"),因为这不是严格可移植的

(我目前正在通过自己覆盖 LiquibaseUUIDType并将列设为 a来解决此问题VARCHAR,但CHAR无论如何,严格来说似乎更好。这似乎是一个矫枉过正的解决方案。)

显然,这不是一个直接的问题(因为我有解决方法),但我想学习正确的方法来做到这一点。

4

0 回答 0