用Liquibase的“uuid”

时间:2017-07-15 05:47:52

标签: java mysql hibernate liquibase liquibase-hibernate

使用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,而我们知道长度是固定的,CHAR,Liquibase可以从type="uuid"派生出来(事实上,Liquibase定义了这个在UUIDType)中。因此,启动时的Hibernate验证将不确定VARCHARCHAR之间的类型差异。

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

  • 不要在Liquibase更改日志中的type="uuid"上妥协
  • 请勿使用@Column(..., columnDefinition="CHAR"),因为这不是严格的便携式

(我目前正在通过自己覆盖Liquibase的UUIDType并使列成为VARCHAR来解决这个问题,但严格来说,CHAR似乎更好了。看起来像是一种矫枉过正的解决方案。)

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

0 个答案:

没有答案