一尘不染

Hibernate支持的Postgresql UUID吗?

hibernate

我无法让Hibernate使用PostgreSQL的java.util.UUID。

这是使用javax.persistence。*批注的映射:

private UUID itemUuid;

@Column(name="item_uuid",columnDefinition="uuid NOT NULL")
public UUID getItemUuid() {
    return itemUuid;
}

public void setItemUuid(UUID itemUuid) {
    this.itemUuid = itemUuid;
}

当持久化一个临时对象时,我得到一个SQLGrammarException:

column "item_uuid" is of type uuid but expression is of type bytea at character 149

PostgreSQL版本是8.4.4
JDBC驱动程序-8.4.4-702(也尝试过9.0-相同)
Hibernate版本是3.6,主要配置属性:

<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.url">jdbc:postgresql://192.168.1.1/db_test</property>

阅读 318

收藏
2020-06-20

共1个答案

一尘不染

可以通过在UUID中添加以下注释来解决此问题:

import org.hibernate.annotations.Type;
...
@Type(type="pg-uuid")
private java.util.UUID itemUuid;

至于为什么Hibernate不仅将其设为默认设置,我无法告诉您…

更新:使用createNativeQuery方法打开具有UUID字段的对象似乎仍然存在问题。幸运的是,到目前为止,createQuery方法对我来说还不错。

2020-06-20