Этот вопрос действительно старенький, и на него ответили в течение длительного времени, но я недавно оказался в той же ситуации и нашел хорошее решение. Для начала я обнаружил, что Hibernate имеет три различные встроенные реализации типа UUID:
binary-uuid
: сохраняет UUID как двоичныйuuid-char
: сохраняет UUID как последовательность символовpg-uuid
: использует собственный тип UUID Postgres
Эти типы регистрируются по умолчанию и могут быть указаны для заданного поля с @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
тип доступен в обеих средах.