我想将PostgreSQL的本机UUID类型与Java UUID一起使用。我使用Hibernate作为我的JPA提供程序和ORM。如果我尝试直接保存它,它只是在Postgres中保存为bytea。
我该怎么做?
答案 0 :(得分:9)
尝试使用JDBC驱动程序的最新开发版本(目前为8.4dev-700),或等待下一个发行版本。 (已编辑添加:8.4-701已发布)
release notes提到了这一变化:
将数据库uuid类型映射到java.util.UUID。这仅适用于相对较新的服务器(8.3)和JDK(1.5)版本。
答案 1 :(得分:4)
这是我在Postgresql UUID supported by Hibernate?上的答案的重新发布...我知道这个问题已经过时了,但是如果有人偶然发现它,这将有助于他们解决问题。
这可以通过在UUID中添加以下注释来解决:
import org.hibernate.annotations.Type;
...
@Type(type="pg-uuid")
private java.util.UUID itemUuid;
至于为什么Hibernate不会将其设为默认设置,我无法告诉你......
更新:使用createNativeQuery
方法打开具有UUID字段的对象时似乎仍然存在问题。幸运的是,到目前为止createQuery
方法对我来说效果很好。
答案 2 :(得分:0)
在非JPA用法中,我创建一个UserType来将UUID格式化为PostgreSQL接受的字符串,然后只需将UserType实现的名称作为列类型。
答案 3 :(得分:0)
你可以试试:
@Column(name="foo", columnDefinition="uuid")
其中columnDefinition是本机SQL的片段
答案 4 :(得分:0)
也许你可以将UUID类型自动转换为String(uuid.toString()应该给出规范的36-char表示)? DB通常在字符串和本机类型之间可靠地转换内容。
答案 5 :(得分:0)
试试这个
@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()")
private String uuid;