Frage

Ich möchte den nativen Uuid -Typ von PostgreSQL mit einem Java -Uuid verwenden. Ich benutze Hibernate als JPA -Anbieter und Orm. Wenn ich versuche, es direkt zu speichern, wird es nur als Bytea in Postgres gespeichert.

Wie kann ich das machen?

War es hilfreich?

Lösung

Verwenden Sie die neueste Entwicklungsversion des JDBC-Treibers (derzeit 8.4DEV-700) oder warten Sie auf die nächste Version. (Bearbeitet zu Add: 8.4-701 wurde veröffentlicht)

Das Versionshinweise Erwähnen Sie diese Änderung:

Kartieren Sie den Datenbank -UUID -Typ auf java.util.uuid. Dies funktioniert nur für relativ neue Server- (8.3) und JDK (1,5) -Versionen.

Andere Tipps

Hier ist ein Repost meiner Antwort auf PostgreSQL UUID unterstützt von Hibernate? ... Ich weiß, dass diese Frage alt ist, aber wenn jemand darüber stolpert, hilft dies ihnen.

Dies kann gelöst werden, indem die folgende Annotation zur UUID hinzugefügt wird:

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

Warum Hibernate dies nicht nur zur Standardeinstellung macht, konnte ich es Ihnen nicht sagen ...

AKTUALISIEREN: Es scheint immer noch Probleme zu geben, die die createNativeQuery Methode zum Öffnen von Objekten mit UUID -Feldern. Zum Glück, das createQuery Die Methode hat bisher gut für mich funktioniert.

In der Nicht-JPA-Verwendung würde ich einen Benutzertyp erstellen, um die UUID als Zeichenfolge zu formatieren, die PostgreSQL akzeptiert, und dann den Namen der UserType-Implementierung als Spaltentyp angeben.

Sie könnten es versuchen mit:

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

wobei ColumnDefinition ein Fragment natives SQL ist

Vielleicht können Sie einen uUid-Typ automatisch zu einer Zeichenfolge (uUid.toString () beauftragen, die kanonische 36-CHAR-Darstellung zu geben)? DBs konvertieren normalerweise die Dinge zuverlässig zwischen Saiten und nativen Typen.

Versuche dies

@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()")
private String uuid;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top