12

I want to use PostgreSQL's native UUID type with a Java UUID. I am using Hibernate as my JPA provider and ORM. If I try to save it directly, it is just saved as a bytea in Postgres.

How can I do this?

6 Answers 6

13
+75

Try use the latest development version of the JDBC driver (Currently 8.4dev-700), or wait for the next release version. (Edited to add: 8.4-701 has been released)

The release notes mention this change:

Map the database uuid type to java.util.UUID. This only works for relatively new server (8.3) and JDK (1.5) versions.

Sign up to request clarification or add additional context in comments.

1 Comment

This seems to be failing presently with the driver version 9.2-1002 and hibernate-core 3.3.1.GZ. There is a outstanding unanswered question at community.jboss.org/thread/229747?_sscc=t. I also run into a problem with this using GORM.
5

Here's a repost of my answer on Postgresql UUID supported by Hibernate? ... I know this question is old, but if someone stumbles across it, this will help them out.

This can be solved by adding the following annotation to the UUID:

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

As to why Hibernate doesn't just make this the default setting, I couldn't tell you...

UPDATE: There still seem to be issues using the createNativeQuery method to open objects that have UUID fields. Fortunately, the createQuery method so far has worked fine for me.

Comments

1

you could try with:

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

where columnDefinition is a fragment of native SQL

Comments

1

Try this

@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()")
private String uuid;

Comments

0

In non-JPA usage I'd create a UserType to format the UUID as a string that PostgreSQL accepts, then just give the name of the UserType implementation as the column type.

Comments

0

Perhaps you can get UUID type to be auto-converted to a String (uuid.toString() should give the canonical 36-char representation)? DBs usually convert things reliably between Strings and native types.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.