Ich habe eine Tabelle mit Kundendaten in einer Oracle-Datenbank. Hier ist eine vereinfachte Definition:
%Vor% Der Primärschlüssel für diese Tabelle ist (CUSTOMER_ID, SOURCE_SYSTEM)
.
Die Tabelle enthält zahlreiche Zeilen, für die SOURCE_SYSTEM
null ist. Auf Datenbankebene gibt es kein Problem. Wenn ich jedoch über die JPA-Entität auf eine dieser Zeilen zugreifen möchte, verursacht dies eine Reihe von Problemen:
1: Die Verwendung von em.find()
zum Abrufen einer Zeile mit einer Null SOURCE_SYSTEM
führt immer zu einer Rückgabe von null.
2: Die Verwendung von em.merge()
zum Hochladen einer Zeile mit einer Null SOURCE_SYSTEM
ist erfolgreich, wenn der Datensatz nicht in der Tabelle vorhanden ist, aber bei nachfolgenden Aktualisierungen fehlschlägt, da die Zusammenführung ALWAYS zu einer Ausführung führt.
3: Die Verwendung von em.createQuery()
zur expliziten Abfrage nach einer Zeile mit einem Nullwert verursacht die folgende Ausnahme:
Leider scheint "Primärschlüssel dürfen nicht null enthalten" ziemlich final zu sein. Ich konnte nicht zu viele Informationen zu Problemumgehungen für diesen Fehler finden, wodurch es scheint, als gäbe es keine Lösung.
DIE FRAGE : Ich würde gerne wissen, ob jemand eine Java-Code-basierte Lösung hat, die keine Änderungen an der Datenbank. Mein aktueller Workaround ist die Verwendung von ROW_ID
als @Id
der Tabelle, aber das bedeutet, dass ich em.merge()
oder em.find()
nicht mehr verwenden kann.
Hier sind meine Java-Klassen:
Kunde.java:
%Vor%Kunden_Id.java
%Vor%Primärschlüssel dürfen nicht null enthalten (in JPA oder in Datenbanken). Verwenden Sie einen anderen Wert wie "" oder "".
Ist die customer_id eindeutig? Wenn ja, dann entferne einfach das sourceSystem von der ID.
Andernfalls könnten Sie versuchen, einen Fehler zu protokollieren, um Unterstützung für Null-IDs zu erhalten.
Tags und Links java jpa jpa-2.0 eclipselink ejb-3.0