use of org.hibernate.test.event.collection.association.bidirectional.manytomany.ChildWithBidirectionalManyToMany in project hibernate-orm by hibernate.
the class AbstractCollectionEventTest method testMoveCollectionToDifferentParentFlushMoveToDifferentParent.
@Test
public void testMoveCollectionToDifferentParentFlushMoveToDifferentParent() {
CollectionListeners listeners = new CollectionListeners(sessionFactory());
ParentWithCollection parent = createParentWithOneChild("parent", "child");
ParentWithCollection otherParent = createParentWithOneChild("otherParent", "otherChild");
ParentWithCollection otherOtherParent = createParentWithNoChildren("otherParent");
listeners.clear();
Session s = openSession();
Transaction tx = s.beginTransaction();
parent = (ParentWithCollection) s.get(parent.getClass(), parent.getId());
otherParent = (ParentWithCollection) s.get(otherParent.getClass(), otherParent.getId());
otherOtherParent = (ParentWithCollection) s.get(otherOtherParent.getClass(), otherOtherParent.getId());
Collection otherCollectionOrig = otherParent.getChildren();
Collection otherOtherCollectionOrig = otherOtherParent.getChildren();
otherParent.newChildren(parent.getChildren());
parent.newChildren(null);
s.flush();
otherOtherParent.newChildren(otherParent.getChildren());
otherParent.newChildren(null);
tx.commit();
s.close();
int index = 0;
Child otherChildOrig = null;
if (((PersistentCollection) otherCollectionOrig).wasInitialized()) {
checkResult(listeners, listeners.getInitializeCollectionListener(), otherParent, otherCollectionOrig, index++);
otherChildOrig = (Child) otherCollectionOrig.iterator().next();
if (otherChildOrig instanceof ChildWithBidirectionalManyToMany) {
checkResult(listeners, listeners.getInitializeCollectionListener(), (ChildWithBidirectionalManyToMany) otherChildOrig, index++);
}
}
checkResult(listeners, listeners.getInitializeCollectionListener(), parent, otherOtherParent.getChildren(), index++);
Child otherOtherChild = (Child) otherOtherParent.getChildren().iterator().next();
if (otherOtherChild instanceof ChildWithBidirectionalManyToMany) {
checkResult(listeners, listeners.getInitializeCollectionListener(), (ChildWithBidirectionalManyToMany) otherOtherChild, index++);
}
checkResult(listeners, listeners.getPreCollectionRemoveListener(), parent, otherOtherParent.getChildren(), index++);
checkResult(listeners, listeners.getPostCollectionRemoveListener(), parent, otherOtherParent.getChildren(), index++);
checkResult(listeners, listeners.getPreCollectionRemoveListener(), otherParent, otherCollectionOrig, index++);
checkResult(listeners, listeners.getPostCollectionRemoveListener(), otherParent, otherCollectionOrig, index++);
if (otherOtherChild instanceof ChildWithBidirectionalManyToMany) {
checkResult(listeners, listeners.getPreCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) otherChildOrig, index++);
checkResult(listeners, listeners.getPostCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) otherChildOrig, index++);
checkResult(listeners, listeners.getPreCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) otherOtherChild, index++);
checkResult(listeners, listeners.getPostCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) otherOtherChild, index++);
}
checkResult(listeners, listeners.getPreCollectionRecreateListener(), otherParent, otherOtherParent.getChildren(), index++);
checkResult(listeners, listeners.getPostCollectionRecreateListener(), otherParent, otherOtherParent.getChildren(), index++);
if (((PersistentCollection) otherOtherCollectionOrig).wasInitialized()) {
checkResult(listeners, listeners.getInitializeCollectionListener(), otherOtherParent, otherOtherCollectionOrig, index++);
}
checkResult(listeners, listeners.getPreCollectionRemoveListener(), otherParent, otherOtherParent.getChildren(), index++);
checkResult(listeners, listeners.getPostCollectionRemoveListener(), otherParent, otherOtherParent.getChildren(), index++);
checkResult(listeners, listeners.getPreCollectionRemoveListener(), otherOtherParent, otherOtherCollectionOrig, index++);
checkResult(listeners, listeners.getPostCollectionRemoveListener(), otherOtherParent, otherOtherCollectionOrig, index++);
if (otherOtherChild instanceof ChildWithBidirectionalManyToMany) {
checkResult(listeners, listeners.getPreCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) otherOtherChild, index++);
checkResult(listeners, listeners.getPostCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) otherOtherChild, index++);
}
checkResult(listeners, listeners.getPreCollectionRecreateListener(), otherOtherParent, index++);
checkResult(listeners, listeners.getPostCollectionRecreateListener(), otherOtherParent, index++);
// there should also be pre- and post-recreate collection events for parent, and otherParent
// but thats broken now; this is covered in BrokenCollectionEventTest
checkNumberOfResults(listeners, index);
}
use of org.hibernate.test.event.collection.association.bidirectional.manytomany.ChildWithBidirectionalManyToMany in project hibernate-orm by hibernate.
the class AbstractCollectionEventTest method testMoveCollectionToDifferentParent.
@Test
public void testMoveCollectionToDifferentParent() {
CollectionListeners listeners = new CollectionListeners(sessionFactory());
ParentWithCollection parent = createParentWithOneChild("parent", "child");
ParentWithCollection otherParent = createParentWithOneChild("otherParent", "otherChild");
listeners.clear();
Session s = openSession();
Transaction tx = s.beginTransaction();
parent = (ParentWithCollection) s.get(parent.getClass(), parent.getId());
otherParent = (ParentWithCollection) s.get(otherParent.getClass(), otherParent.getId());
Collection otherCollectionOrig = otherParent.getChildren();
otherParent.newChildren(parent.getChildren());
parent.newChildren(null);
tx.commit();
s.close();
int index = 0;
Child otherChildOrig = null;
if (((PersistentCollection) otherCollectionOrig).wasInitialized()) {
checkResult(listeners, listeners.getInitializeCollectionListener(), otherParent, otherCollectionOrig, index++);
otherChildOrig = (Child) otherCollectionOrig.iterator().next();
if (otherChildOrig instanceof ChildWithBidirectionalManyToMany) {
checkResult(listeners, listeners.getInitializeCollectionListener(), (ChildWithBidirectionalManyToMany) otherChildOrig, index++);
}
}
checkResult(listeners, listeners.getInitializeCollectionListener(), parent, otherParent.getChildren(), index++);
Child otherChild = (Child) otherParent.getChildren().iterator().next();
if (otherChild instanceof ChildWithBidirectionalManyToMany) {
checkResult(listeners, listeners.getInitializeCollectionListener(), (ChildWithBidirectionalManyToMany) otherChild, index++);
}
checkResult(listeners, listeners.getPreCollectionRemoveListener(), parent, otherParent.getChildren(), index++);
checkResult(listeners, listeners.getPostCollectionRemoveListener(), parent, otherParent.getChildren(), index++);
checkResult(listeners, listeners.getPreCollectionRemoveListener(), otherParent, otherCollectionOrig, index++);
checkResult(listeners, listeners.getPostCollectionRemoveListener(), otherParent, otherCollectionOrig, index++);
if (otherChild instanceof ChildWithBidirectionalManyToMany) {
checkResult(listeners, listeners.getPreCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) otherChildOrig, index++);
checkResult(listeners, listeners.getPostCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) otherChildOrig, index++);
checkResult(listeners, listeners.getPreCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) otherChild, index++);
checkResult(listeners, listeners.getPostCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) otherChild, index++);
}
checkResult(listeners, listeners.getPreCollectionRecreateListener(), otherParent, index++);
checkResult(listeners, listeners.getPostCollectionRecreateListener(), otherParent, index++);
// there should also be pre- and post-recreate collection events for parent, but thats broken now;
// this is covered in BrokenCollectionEventTest
checkNumberOfResults(listeners, index);
}
Aggregations