2009-04-17 11 views
9

Quiero utilizar el tipo de UUID nativo de PostgreSQL con un UUID de Java. Estoy usando Hibernate como mi proveedor de JPA y ORM. Si trato de guardarlo directamente, solo se guarda como bytea en Postgres.Postgres + Hibernate + UUID de Java

¿Cómo puedo hacer esto?

Respuesta

8

Pruebe utilizar la última versión de desarrollo del controlador JDBC (actualmente 8.4dev-700) o espere a la próxima versión. (Editado para añadir: 8,4-701 ha sido liberado)

La mención release notes este cambio:

representar el tipo de base de datos para uuid java.util.UUID. Esto solo funciona para versiones relativamente nuevas de servidor (8.3) y JDK (1.5).

+2

Esto parece estar fallando actualmente con la versión del controlador y 9,2-1002 3.3.1.GZ. hibernación núcleos Hay una pregunta pendiente sin respuesta en https://community.jboss.org/thread/229747?_sscc=t. También encuentro un problema con esto usando GORM. –

0

En el uso sin JPA, crearía un UserType para formatear el UUID como una cadena que PostgreSQL acepta, y luego simplemente daré el nombre de la implementación UserType como el tipo de columna.

0

podría intentar con:

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

donde ColumnDefinition es un fragmento de SQL nativo

0

quizás usted puede conseguir tipo UUID para ser auto-convierte en una cadena (uuid.toString() debe dar la representación canónica de 36 caracteres)? Los DB generalmente convierten las cosas de manera confiable entre cadenas y tipos nativos.

3

Aquí hay un resúmen de mi respuesta en Postgresql UUID supported by Hibernate? ... Sé que esta pregunta es antigua, pero si alguien tropieza con ella, esto les ayudará.

Esto se puede resolver mediante la adición de la siguiente anotación para el UUID:

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

cuanto a por qué Hibernate no se limita a hacer este ajuste por defecto, yo no podría decir ...

ACTUALIZACIÓN: Todavía parece haber problemas con el método createNativeQuery para abrir objetos que tienen campos UUID. Afortunadamente, el método createQuery hasta ahora me ha funcionado bien.

0

Prueba este

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