Search in sources :

Example 16 with ChildWithBidirectionalManyToMany

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);
}
Also used : PersistentCollection(org.hibernate.collection.spi.PersistentCollection) Transaction(org.hibernate.Transaction) Collection(java.util.Collection) PersistentCollection(org.hibernate.collection.spi.PersistentCollection) ChildWithBidirectionalManyToMany(org.hibernate.test.event.collection.association.bidirectional.manytomany.ChildWithBidirectionalManyToMany) Session(org.hibernate.Session) Test(org.junit.Test)

Example 17 with ChildWithBidirectionalManyToMany

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);
}
Also used : PersistentCollection(org.hibernate.collection.spi.PersistentCollection) Transaction(org.hibernate.Transaction) Collection(java.util.Collection) PersistentCollection(org.hibernate.collection.spi.PersistentCollection) ChildWithBidirectionalManyToMany(org.hibernate.test.event.collection.association.bidirectional.manytomany.ChildWithBidirectionalManyToMany) Session(org.hibernate.Session) Test(org.junit.Test)

Aggregations

Session (org.hibernate.Session)17 Transaction (org.hibernate.Transaction)17 ChildWithBidirectionalManyToMany (org.hibernate.test.event.collection.association.bidirectional.manytomany.ChildWithBidirectionalManyToMany)17 Test (org.junit.Test)17 PersistentCollection (org.hibernate.collection.spi.PersistentCollection)15 Collection (java.util.Collection)6 PersistentSet (org.hibernate.collection.internal.PersistentSet)1 AbstractCollectionEventTest (org.hibernate.test.event.collection.AbstractCollectionEventTest)1 ChildEntity (org.hibernate.test.event.collection.ChildEntity)1 CollectionListeners (org.hibernate.test.event.collection.CollectionListeners)1 ParentWithCollection (org.hibernate.test.event.collection.ParentWithCollection)1