Die UUID-ID für meine Entitäten kann nicht generiert werden

8

Ich arbeite an einem Webprojekt mit:

  • Spring 4.x (Spring Boot 1.3.3)
  • Hibernate 4.x
  • PostgreSQL 9.x

Ich bin neu in Postgres DB und für meine Tabellen habe ich mich entschieden, UUID Identifikatoren zu verwenden, aber ich habe einige Probleme ...

Für das Feld ID habe ich Postgres uuid type verwendet und als Standardwert uuid_generate_v4() festgelegt. Alles funktioniert korrekt, wenn ich eine neue Zeile direkt von einer PSQL-Einfügung erzeuge, aber ich kann keinen neuen Datensatz von meiner Anwendung erstellen.

Als Beispiel habe ich eine Entität in meiner Anwendung deklariert:

%Vor%

Für diese Deklaration verwende ich die Annotation Type Hibernate.

Find -Operationen funktionieren gut, aber wenn ich versuche, einzufügen bekomme ich diese Ausnahme:

  

org.springframework.orm.jpa.JpaSystemException: IDs für diese Klasse müssen manuell zugewiesen werden, bevor save () aufgerufen wird: net.myapp.User;

Folge dieses Tutorial Ich habe versucht, das Problem zu lösen. Ich habe meine Entity-Definition folgendermaßen geändert:

%Vor%

Aber jetzt bekomme ich falsche ID-Werte, wenn ich (existierende) Daten von der DB abrufe (habe noch nicht versucht, Einfügen ...).

Also, was ist der richtige Weg, um ID-Feld in meinem Fall zu definieren?

AKTUALISIEREN

Die zweite Definition verwenden ...

Wenn ich versuche, nach ID zu suchen, bekomme ich:

  

org.postgresql.util.PSQLException: FEHLER: Operator existiert nicht: uuid = bytea     Hinweis: Kein Operator entspricht dem angegebenen Namen und Argumenttyp (en). Sie müssen möglicherweise explizite Typumwandlungen hinzufügen.

Wenn ich versuche, einen neuen Datensatz zu erstellen:

  

org.springframework.dao.InvalidDataAccessResourceUsageException: konnte Anweisung nicht ausführen; SQL [n / a];

    
davioooh 10.04.2016, 10:27
quelle

3 Antworten

3

Ich verwende die folgende Konfiguration und es funktioniert. Ich verwende Glassfish als Anwendungsserver.

%Vor%

Der Tabellenschlüssel hat den Typ Postgres uuid :

%Vor%     
S.Stavreva 10.04.2016, 16:01
quelle
0

Arbeitete als ein Charme:

  • Erstellen Sie eine benutzerdefinierte Konfigurationsklasse

    %Vor%
  • Fügen Sie in Ihrer application.properties das

  • hinzu

spring.jpa.database-platform = meinpackage.PostgresUuidDialect

(ändern Sie meinPaket nach Ihren Bedürfnissen)

Pro: Sie müssen keine spezielle Anmerkung in Ihrer JPA-Entität verwenden

Nachteile: Diese obskure -Klasse in Ihrem Projekt ...

    
medveshonok117 11.04.2016 14:43
quelle
0

Ich habe diese Konfiguration verwendet und das funktioniert für mich und Ich benutze

  • Spring Boot 1.5.2
  • Hibernate 5
  • PostgreSQL 9.6

Entity.java

%Vor%

davor schlage ich vor, dass Sie uuid-ossp it in Ihre Datenbank laden, um sie zu benutzen.

%Vor%     
Vinit Solanki 01.06.2017 09:18
quelle