# Hibernate / JPA erkennen von schon gespeicherten Objekten



## Psypsy (21. Jun 2015)

Moin,

kann man Hibernaten/ JPA davon überzeugen erst in einer Tabelle zu schauen ob das was ich jetzt Speichern möchte schon enthalten ist und dies dann zu verbinden?

Also  ich habe eine Entität z.B. Land diese hat ein Attribut Name und dieser ist Unique.
Jetzt kommen Benutzer und wollen Länder speichern.
Der erste speichert Deutschland, alles super ist in der Datenbank drin!
Jetzt kommt der zweite und will auch Deutschland speichern jetzt gibt es aber ein Exception da Deutschland schon enthalten ist.


Also natürlich kann ich die Exception abfangen und verarbeiten oder ich kann vor jedem Speichern in der Datenbank suchen und wenn schon etwas passendes vorhanden ist dieses nehmen.

Aber gibt es nicht schon irgendeine Einstellung / Annotation / Framework / usw. was dieses erledigt ohne das ich da viel programmatisch nachhelfen muss?

Weis da jemand rat?

By
PsyPsy


----------



## Maggot (22. Jun 2015)

Psypsy hat gesagt.:


> Moin,
> 
> kann man Hibernaten/ JPA davon überzeugen erst in einer Tabelle zu schauen ob das was ich jetzt Speichern möchte schon enthalten ist und dies dann zu verbinden?
> 
> ...



Wenn du die Exception auffangst, dann weißt du das es das schon gibt und kannst es dann nehmen.


----------



## Psypsy (22. Jun 2015)

Ja, aber das ist ja genau das was ich nicht möchte!

1. Neue Entität mit zweiter Entität dessen Wert schon in der Datenbank vorhanden ist speichern, erste befehl an der Datenbank
2. Fehlermeldung Wert Ist schon enthalten
3. Wert oder Entität identifizieren
4. Daten aus der Datenbank für die Entität laden, zweiter Befehl an die Datenbank
5. Entität durch die Entität mit den Daten der Datenbank tauschen
6. Nochmal speichern, dritter Befehl an die Datenbank

So und genau diesen Kram will ich mir ersparen soweit es geht!
Gibt es keine Möglichkeit das das einsetzten der richtigen Entität aus der Datenbank automatisch funktioniert??

By
PsyPsy


----------



## redJava99 (22. Jun 2015)

Gemerged wird immer über den Primary Key. Du kannst also den Namen des Lands als Primary Key festlegen. Dir sollte aber klar sein, dass du die dann die Fehlerbehandlung verbaust und je nach zeitlicher Überschneidung der beiden Bearbeitungen ggf. Werte ungewollt überschreibst.


----------



## Psypsy (22. Jun 2015)

Also bleibt mir wohl nicht anderes übrig da ich als PrimeryKey die Id brauche / haben möchte.

Trotzdem Danke an alle, falls sonst noch jemand eine Idee hat immer her damit, man möchte ja nicht dumm sterben oder braucht das woanders nochmal!

By
PsyPsy


----------

