Ich arbeite an einem Webprojekt mit:
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];
Ich verwende die folgende Konfiguration und es funktioniert. Ich verwende Glassfish als Anwendungsserver.
%Vor% Der Tabellenschlüssel hat den Typ Postgres uuid
:
Arbeitete als ein Charme:
Erstellen Sie eine benutzerdefinierte Konfigurationsklasse
%Vor%Fügen Sie in Ihrer application.properties das
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 ...
Ich habe diese Konfiguration verwendet und das funktioniert für mich und Ich benutze
Entity.java
%Vor% davor schlage ich vor, dass Sie uuid-ossp
it in Ihre Datenbank laden, um sie zu benutzen.
Tags und Links java jpa hibernate spring postgresql