2012-04-05 4 views
0

Ich programmiere gerade eine heikle Update-Aufgabe, bei der einzelne Entity-Objekte in einer atomaren Transaktion mehr als einmal aktualisiert werden. Mein Druckvorgang sieht wie folgt aus (Weglassen des versuchen/Fang für Klarheit):Schadet es irgendetwas, eine Entität zweimal in eine Transaktion aufzunehmen?

@PersistenceContext protected EntityManager em; 
@Resource   protected UserTransaction utx;  
... 
utx.begin(); 
for (Record r : listOfRecords) em.merge(r); 
utx.commit(); 

Wenn es mehrere Verweise auf eine bestimmte Entität in der Liste enthalten sind, ist etwas Schlimmes passiert?

Dies ist mit EclipseLink 2.3.2 als JPA-Anbieter.

Antwort

1

Persistenter Kontext: Ein Persistenzkontext ist eine Gruppe von verwalteten Entitätsinstanzen, in denen für jede persistente Entitätsidentität eine eindeutige Entitätsinstanz vorhanden ist. Innerhalb des Persistenzkontexts werden die Entitätsinstanzen und ihr Lebenszyklus vom Entity Manager verwaltet.

merge(): Zusammenführen des Status der angegebenen Entität in den aktuellen Persistenzkontext.

Daher wird immer nur eine Instanz einer Entität im persistenten Kontext vorhanden sein. Selbst wenn Sie Ihre Entität mehrmals aktualisieren, wird sie nur einmal in die Datenbank reflektiert, wenn die Transaktion festgeschrieben wird.