Postgres + Hibernate + Java UUID
-
09-09-2019 - |
Pregunta
Quiero usar UUID de tipo nativo de PostgreSQL con un UUID de Java. Estoy usando Hibernate como profesional de la APP y ORM. Si trato de guardar directamente, apenas se guarda como un bytea en Postgres.
¿Cómo puedo hacer esto?
Solución
Trate de utilizar la última versión de desarrollo del controlador JDBC (Actualmente 8.4dev-700), o esperar a la próxima versión de lanzamiento. (Editado para añadir: 8,4-701 ha sido liberado)
El notas de mencionar este cambio:
representar el tipo de base de datos para uuid java.util.UUID. Esto sólo funciona para relativamente nuevo servidor (8.3) y (1.5) versiones de JDK.
Otros consejos
Esto es un repost de mi respuesta en Postgresql UUID soportado por Hibernate? ... sé que esta pregunta es viejo, pero si alguien se tropieza con ella, esto le ayudará a cabo.
Esto se puede resolver mediante la adición de la siguiente anotación a la UUID:
import org.hibernate.annotations.Type;
...
@Type(type="pg-uuid")
private java.util.UUID itemUuid;
En cuanto a por qué Hibernate no se limita a hacer esto, el ajuste por defecto, yo no podría decir ...
Actualizar : Hay todavía parecen ser cuestiones utilizando el método createNativeQuery
para abrir los objetos que tienen campos UUID. Afortunadamente, el método createQuery
hasta ahora ha funcionado bien para mí.
En el uso no-APP que crearía un UserType para formatear el UUID como una cadena que PostgreSQL acepta, entonces acaba de dar el nombre de la aplicación UserType como el tipo de columna.
puede probar con:
@Column(name="foo", columnDefinition="uuid")
donde ColumnDefinition es un fragmento de SQL nativo
Tal vez se puede obtener el tipo UUID a convertir-auto a una cadena (uuid.toString () debe dar la representación canónica 36-char)? DB generalmente convertir las cosas de forma fiable entre las cuerdas y los tipos nativos.
Probar
@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()")
private String uuid;