# JPA: Problem bei Mischung von nicht persistenten und bereits persistenten Entities



## megachucky (30. Mrz 2010)

Hallo.

Folgendes Problem: ProjektEntity hat eine Referenz auf MitarbeiterEntity (= Erfasser des Projekts).

Erstelle ich einen neuen Mitarbeiter und persistiere dann das neue Projekt, funktioniert es. Aber i.d.R. gibt es den Mitarbeiter ja schon vorher, d.h. er ist schon in der DB gespeichert.

Nun mache ich:


```
projekt.setErfasser(mitarbeiter); // mitarbeiter ist ein schon vorhandenes Entity (mit id)
daoProjekt.speichereProjekt(projekt); // ruft em.persist(projekt) auf
```

Dann fliegt eine EntityAlreadyExistsException, da eben der Mitarbeiter schon vorhanden ist. 

Wie wird dieses Problem generell JPA-konform gelöst? Also wenn ich ein neues Entity persistieren will, welche Referenzen auf bereits existierende Entities besitzt?

Danke schonmal für Erklärungen...


----------



## MrWhite (30. Mrz 2010)

Hallo,

der EntityManager hat eine Methode, die "merge" heisst.

Schreib also:


```
entityManager.merge(myPersistentObject);
```

Ich benutze fast ausschliesslich merges, selten persists. Persist hat halt einen Performance-Vorteil.


----------



## megachucky (30. Mrz 2010)

Ich lese gerade schon Diskussionen zum Thema "merge" vs. "persist".

Bei mir war auch das Problem, dass ich Cascade.PERSIST und Cascade.MERGE bei der Relation festgelegt hatte. Nun habe ich diese entfernt und es funktioniert auch. Ich denke so ist es auch sinnvoll, weil den Mitarbeiter gibt es ja immer schon vorher, ein cascade auf den Mitarbeiter macht daher keinen Sinn ?!


----------



## MrWhite (30. Mrz 2010)

Das hängt von der Beziehung ab (sieht nach 1:1 aus) und der Art und Weise, wie du das benutzen willst.

Ich finde, Cascades machen fast immer Sinn. Will ja am Ende nicht jedes Objekt des Graphen einzeln abspeichern.


----------

