我使用 Hibernate + JPA 作为我的 ORM 解决方案。
我使用 HSQL 进行单元测试,使用 PostgreSQL 作为真正的数据库。
我希望能够使用 Postgres 的原生UUID使用 Hibernate 键入,并在 HSQL 的字符串表示形式中使用 UUID 进行单元测试(因为 HSQL 没有 UUID 类型)。
我正在使用具有不同配置的持久性 XML 进行 Postgres 和 HSQL 单元测试。
以下是我让 Hibernate “查看”我的自定义 UserType 的方式:
@Id
@Column(name="UUID", length=36)
@org.hibernate.annotations.Type(type="com.xxx.UUIDStringType")
public UUID getUUID() {
return uuid;
}
public void setUUID(UUID uuid) {
this.uuid = uuid;
}
效果很好。但我需要的是能够在 XML 中或从属性文件中交换注释的“com.xxx.UUIDStringType”部分,无需重新编译即可更改。
有任何想法吗?
嘿,对于那些在 Hibernate 4 中寻求解决方案的人(因为 Dialect#addTypeOverride 方法不再可用),我找到了一个,基于这是史蒂夫·埃伯索尔的评论
您必须构建一个像这样的自定义用户类型:
public class UUIDStringCustomType extends AbstractSingleColumnStandardBasicType {
public UUIDStringCustomType() {
super(VarcharTypeDescriptor.INSTANCE, UUIDTypeDescriptor.INSTANCE);
}
@Override
public String getName() {
return "pg-uuid";
}
}
要将其绑定到 HSQLDB 方言,您必须构建一个自定义方言来重写 Dialect#contributeTypes 方法,如下所示:
public class CustomHsqlDialect extends HSQLDialect {
@Override
public void contributeTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry) {
super.contributeTypes(typeContributions,serviceRegistry);
typeContributions.contributeType(new UUIDStringCustomType());
}
}
然后您可以将 @Type(type="pg-uuid") 与两个数据库一起使用。
希望它能帮助某人...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)