Postgres+Hibernate+Java UUID
-
09-09-2019 - |
質問
使いたいのPostgreSQLのネイティブのUUIDの型をJava UUID.を使用してい冬眠っJPAプロバイダは、ORM.ばくまで保存されてbyteaにPostgres.
する方法を教えてください。
解決
JDBCドライバ(現在8.4dev-700)の最新開発版を使用してみるか、次のリリースバージョンを待ちます。 (追加する編集:8.4から701がリリースされました)。
リリースには、この変更に言及を指摘します:
java.util.UUIDに、データベースの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実装の名前を付け、PostgreSQLが受け入れることを文字列としてUUIDをフォーマットするのUserTypeを作成すると思います。
あなたが試すことができます:
@Column(name="foo", columnDefinition="uuid")
columnDefinitionネイティブSQLの断片である
おそらく、あなたは(標準的な36-char型の表現を与える必要があります)uuid.toString()UUID型の自動変換後の文字列にすることで入手できますか? DBを通常の文字列とネイティブ型の間に確実なものに変換します。
これを試してみてください。
@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()")
private String uuid;