Postgres + Hibernate + Java UUID
-
09-09-2019 - |
Question
Je veux utiliser le type UUID natif de PostgreSQL avec Java UUID. J'utilise Hibernate comme mon fournisseur de JPA et ORM. Si je tente de sauver directement, il est tout simplement enregistré en tant que bytea dans Postgres.
Comment puis-je faire?
La solution
Essayez d'utiliser la dernière version de développement du pilote JDBC (actuellement 8.4dev-700), ou attendre la prochaine version de version. (Sous la direction d'ajouter: a été libéré 8,4 à 701)
Le notes de version mentionner ce changement:
Carte de la base de données de type UUID à java.util.UUID. Cela ne fonctionne que pour les versions relativement nouveau serveur (8.3) et (1,5) JDK.
Autres conseils
Voici une republication de ma réponse sur Postgresql UUID pris en charge par Hibernate? ... Je sais que cette question est vieux, mais si quelqu'un trébuche à travers elle, cela les aidera à sortir.
Ceci peut être résolu en ajoutant l'annotation suivante à l'UUID:
import org.hibernate.annotations.Type;
...
@Type(type="pg-uuid")
private java.util.UUID itemUuid;
Quant à savoir pourquoi Hibernate ne se contente pas activer ce réglage par défaut, je ne pourrais pas vous dire ...
UPDATE : Il semble encore avoir des problèmes en utilisant la méthode createNativeQuery
pour ouvrir des objets qui ont UUID. Heureusement, la méthode createQuery
a jusqu'à présent travaillé très bien pour moi.
Dans l'usage non-JPA je crée un UserType pour formater la UUID comme une chaîne qui accepte PostgreSQL, puis juste donner le nom de la mise en œuvre de UserType comme type de colonne.
vous pouvez essayer avec:
@Column(name="foo", columnDefinition="uuid")
où columnDefinition est un fragment de SQL natif
Peut-être que vous pouvez obtenir le type UUID à auto-converti en chaîne (uuid.toString () devrait donner la représentation 36-char canonique)? BDs convertir généralement les choses de manière fiable entre les chaînes et les types natifs.
Essayer cette
@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()")
private String uuid;