# Hibernate: Objekt nur persistieren, wenn Datensatz noch nicht vorhanden?



## DarthShader (21. Oktober 2007)

Hallo,

ich habe eine Frage bezüglich Datenbanken und Hibernate:

Nehmen wir an, ich möchte mit Hibernate ein Objekt in der Datenbank persistent machen. Ein Objekt entspricht ja einem Datensatz in einer Tablle - gibt es in Hibernate eine Funktionalität, mit der ich das Objekt nur dann in die Tabelle schreibe, wenn ein entsprechender Datensatz noch nicht vorhanden ist? Wenn er schon vorhanden ist, möchte ich nur die entsprechende id (den Primärschlüssel) des Objektes gesetzt bekommen.

Damit würde ich gerne verhindern, dass viele doppelte Datensätze in der Tabelle landen.

Ist das möglich?


Danke!


----------



## zerix (22. Oktober 2007)

Hallo,

wenn ich dich richtig verstanden hab möchtest du es so haben, dass wenn du ein befülltes Object hast und es in der Datenbank gibt es ein Object mit den gleichen Werten, dann soll das Object nicht mehr selbst abgespeichert werden, sondern einfach die ID in dein Object eingetragen werden, oder?

MFG

zEriX


----------



## DarthShader (22. Oktober 2007)

Ja genau, Du hast es richtig beschrieben. Damit möchte ich verhindern, dass viele doppelte Datensätze, die sich nur in ihrem (technischen) Primärschlüssel unterscheiden, in der Tabelle stehen.

Ohne Hibernate würde man ja so vorgehen:

1. Prüfe per SQL SELECT, ob die zu speichernden Daten schon in der Tabelle stehen, und ermittlte gegebenenfalls die entsprechende id (Primärschlüssel) des vorhandenen Datensatzes.

2. Da von einer anderen Tabelle aus auf die Daten per FK verwiesen wird, setze entweder die zuvor ermittelte id ein, oder die neue id, die daraus entstanden ist, dass ein neuer Datensatz in der 1. Tabelle angelegt wurde.


Die Frage ist eben, kann man das in Hibernate automatisieren? Gibts da irgendein "Flag", eine Konstante, die man beim Persistieren angeben kann, damit Hibernate zuvor prüft, ob die Daten schon in der Tabelle vorhanden sind?


Danke!


----------



## zerix (22. Oktober 2007)

Soweit ich weiß, ist das von Hibernate aus nicht möglich.

MFG

zEriX


----------

