Postgres的+ Hibernate的+ Java的UUID
-
09-09-2019 - |
题
我想使用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;
不隶属于 StackOverflow