这个问题确实很老了,已经回答了很长时间,但是最近我也遇到了同样的情况,并且找到了一个很好的解决方案。首先,我发现Hibernate具有三种不同的内置UUID类型实现:
binary-uuid
:将UUID存储为二进制uuid-char
:将UUID存储为字符序列pg-uuid
:使用本地Postgres UUID类型
这些类型默认情况下已注册,并且可以为带
@Type注释的给定字段指定,例如
@Column@Type(type = "pg-uuid")private UUID myUuidField;
还有 也是 在覆盖默认类型的机制
Dialect。因此,如果最终的部署是与Postgres数据库进行通信,但是单元测试使用HSQL,则可以
pg-uuid通过编写自定义方言来覆盖类型以读取/写入字符数据,如下所示:
public class CustomHSQLDialect extends HSQLDialect { public CustomHSQLDialect() { super(); // overrides the default implementation of "pg-uuid" to replace it // with varchar-based storage. addTypeOverride(new UUIDCharType() { @Override public String getName() { return "pg-uuid"; } }); }}现在,只需插入自定义方言,该
pg-uuid类型就可以在两种环境中使用。



