Verstoß gegen Eindeutigkeit

javaner08

Aktives Mitglied
Welche Ursachen kann das haben, wenn nach einem Aufruf von
Java:
getHibernateTemplate().saveOrUpdate(<object>);

von Oracle-Server die Fehlermeldung "ORA-00001: Verstoß gegen Eindeutigkeit" kommt ?

Eigentlich sollte doch so ein saveOrUpdate einfach nur einen "Update" durchführen ... hat jemand einen Tipp, wo ich mit der Fehlersuche anfangen kann ?
 

javaner08

Aktives Mitglied
Wenn ich an der Stelle, wo jetzt der SaveOrUpdate steht, einfach nur einen Update durchführe, dann funktioniert alles einwandfrei.

Daher meine Frage :
Wieso führt Hibernate dann bei Aufruf von "SaveOrUpdate" nicht einfach einen Update durch anstatt einen Insert zu versuchen und dann mit obiger Fehlermeldung abzubrechen ?
 
N

nillehammer

Gast
Hibernate erkennt anhand des State des Java-Objekts, ob eine Entiy bereits persistiert wurde. Dazu kann folgendes benutzt werden:
ID-Feld == null --> noch nicht persisitert --> INSERT, != null --> schonmal persisitert --> UPDATE
Version-Feld ... (Mechanismus wie bei ID-Feld)

Wenn du weder ein nullbares Version-Feld noch ID-Feld hast, weil du statt der Wrapper primitive Datentypen verwendest (z.B. long oder int), dann musst Du Hibernate beim Mapping sagen, welchen Wert es als "not persisted" annehmen soll (üblicherweise 0, weil das der Defaultinitialisierung enspricht).

Ich rate aber zu nullable Types.
 

DerFeivel

Bekanntes Mitglied
Wenn ich an der Stelle, wo jetzt der SaveOrUpdate steht, einfach nur einen Update durchführe, dann funktioniert alles einwandfrei.

Daher meine Frage :
Wieso führt Hibernate dann bei Aufruf von "SaveOrUpdate" nicht einfach einen Update durch anstatt einen Insert zu versuchen und dann mit obiger Fehlermeldung abzubrechen ?

Wie Nillehammer es schon treffend beschrieben hat:

Hibernate denkt, dass dein Objekt noch nicht persistiert wurde und führt daher das Save und nicht das Update der Funktio auf ;).

Eventuell magst du uns ja noch ein bissl mehr Quelltext zukommen lassen? ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JPA Self-Join gegen große Tabelle bricht irgendwann ab Data Tier 7

Ähnliche Java Themen


Oben