我想使用PostgreSQL的本地UUID类型与Java UUID。我使用Hibernate作为JPA我的提供者和ORM。如果我尝试直接保存它,它只是保存在Postgres的一个BYTEA。

我怎样才能做到这一点?

有帮助吗?

解决方案

尝试使用JDBC驱动程序(目前8.4dev-700)的最新开发版本,或等待下一个发布版本。 (编辑补充:8.4-701已经被释放)

释放说明提及这种变化:

  

地图数据库UUID类型java.util.UUID中。这仅适用于相对较新的服务器(8.3)和JDK(1.5)的版本。

其他提示

下面是我在 PostgreSQL的UUID由Hibernate支持的转贴? ...我知道这个问题是旧的,但如果有人通过它绊倒,这将帮助他们。

这可以通过添加以下标注的UUID来解决:

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

至于为什么Hibernate不只是使这种默认设置,我不能告诉你......

<强>更新:有似乎仍然是使用createNativeQuery方法打开具有UUID字段的对象的问题。幸运的是,createQuery方法至今一直很好,我。

在非JPA使用我想创建一个UserType到UUID格式化为一个字符串,PostgreSQL的接受,那么就得到的UserType执行作为列类型的名称。

您可以尝试使用:

 @Column(name="foo", columnDefinition="uuid") 

其中columnDefinition是本机SQL的片段

也许就可以得到UUID类型被自动转换为一个字符串(根据UUID.toString()应得到规范36炭表示)?通常的DB转换东西可靠字符串和本地类型之间。

尝试此

@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()")
private String uuid;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top