March 26th, 2006
Hibernate-Erkenntnis: Flush und Refresh bei Modifikation von Indexed Collections
Angenommen man hat eine Indexed Collection in Hibernate, also eine Klasse Parent und eine 1:n one-to-many-verknüpfte List der Klasse Child mit, sagen wir mal, vier Elementen. Die Verknüpfung ist bidirektional, also jedes Child hat eine Property parent. Jedes Child hat eine Property listIndex, die den Listindex wiederspiegelt.
Man fügt der Collection nun ein neues Child an beliebiger Stelle hinzu:
parent.getChilden.add(newChild,2);
newChild.setParent(parent); // ist nötig bei bidirektionaler Verknüpfung, siehe hier
Liest man nun die listIndex-Eigenschaft aus allen Children aus, so erhält man folgendes Ergebnis:
child1.getListIndex(): 0 // ok
child2.getListIndex(): 1 // ok
child3.getListIndex(): 0 // the new one, not updated
child4.getListIndex(): 2 // ok
child5.getListIndex(): 3 // ok
Nun ist zunächst mal notwendig:
session.flush();
Macht man nun…
session.refresh(newChild);
…sieht die Liste folgendermaßen aus:
child1.getListIndex(): 0 // ok
child2.getListIndex(): 1 // ok
child3.getListIndex(): 2 // the new one, updated
child4.getListIndex(): 2 // not updated
child5.getListIndex(): 3 // not updated
Mach man stattdessen…
session.refresh(parent);
…ist alles gut:
child1.getListIndex(): 0 // ok
child2.getListIndex(): 1 // ok
child3.getListIndex(): 2 // the new one, updated
child4.getListIndex(): 3 // updated
child5.getListIndex(): 4 // updated


No Responses to “Hibernate-Erkenntnis: Flush und Refresh bei Modifikation von Indexed Collections”
No comments yet
Leave a Reply