Search in sources :

Example 6 with ChildWithBidirectionalManyToMany

use of org.hibernate.test.event.collection.association.bidirectional.manytomany.ChildWithBidirectionalManyToMany in project hibernate-orm by hibernate.

the class AbstractCollectionEventTest method testDeleteParentAndChild.

@Test
public void testDeleteParentAndChild() {
    CollectionListeners listeners = new CollectionListeners(sessionFactory());
    ParentWithCollection parent = createParentWithOneChild("parent", "child");
    Child child = (Child) parent.getChildren().iterator().next();
    listeners.clear();
    Session s = openSession();
    Transaction tx = s.beginTransaction();
    parent = (ParentWithCollection) s.get(parent.getClass(), parent.getId());
    if (child instanceof Entity) {
        child = (Child) s.get(child.getClass(), ((Entity) child).getId());
    }
    parent.removeChild(child);
    if (child instanceof Entity) {
        s.delete(child);
    }
    s.delete(parent);
    tx.commit();
    s.close();
    int index = 0;
    checkResult(listeners, listeners.getInitializeCollectionListener(), parent, index++);
    if (child instanceof ChildWithBidirectionalManyToMany) {
        checkResult(listeners, listeners.getInitializeCollectionListener(), (ChildWithBidirectionalManyToMany) child, index++);
    }
    checkResult(listeners, listeners.getPreCollectionRemoveListener(), parent, index++);
    checkResult(listeners, listeners.getPostCollectionRemoveListener(), parent, index++);
    if (child instanceof ChildWithBidirectionalManyToMany) {
        checkResult(listeners, listeners.getPreCollectionRemoveListener(), (ChildWithBidirectionalManyToMany) child, index++);
        checkResult(listeners, listeners.getPostCollectionRemoveListener(), (ChildWithBidirectionalManyToMany) child, index++);
    }
    checkNumberOfResults(listeners, index);
}
Also used : Transaction(org.hibernate.Transaction) ChildWithBidirectionalManyToMany(org.hibernate.test.event.collection.association.bidirectional.manytomany.ChildWithBidirectionalManyToMany) Session(org.hibernate.Session) Test(org.junit.Test)

Example 7 with ChildWithBidirectionalManyToMany

use of org.hibernate.test.event.collection.association.bidirectional.manytomany.ChildWithBidirectionalManyToMany in project hibernate-orm by hibernate.

the class AbstractCollectionEventTest method testUpdateParentTwoChildrenToOne.

@Test
public void testUpdateParentTwoChildrenToOne() {
    CollectionListeners listeners = new CollectionListeners(sessionFactory());
    ParentWithCollection parent = createParentWithOneChild("parent", "child");
    assertEquals(1, parent.getChildren().size());
    Child oldChild = (Child) parent.getChildren().iterator().next();
    listeners.clear();
    Session s = openSession();
    Transaction tx = s.beginTransaction();
    parent = (ParentWithCollection) s.get(parent.getClass(), parent.getId());
    parent.addChild("new");
    tx.commit();
    s.close();
    listeners.clear();
    s = openSession();
    tx = s.beginTransaction();
    parent = (ParentWithCollection) s.get(parent.getClass(), parent.getId());
    if (oldChild instanceof Entity) {
        oldChild = (Child) s.get(oldChild.getClass(), ((Entity) oldChild).getId());
    }
    parent.removeChild(oldChild);
    tx.commit();
    s.close();
    int index = 0;
    if (((PersistentCollection) parent.getChildren()).wasInitialized()) {
        checkResult(listeners, listeners.getInitializeCollectionListener(), parent, index++);
    }
    if (oldChild instanceof ChildWithBidirectionalManyToMany) {
        ChildWithBidirectionalManyToMany oldChildWithManyToMany = (ChildWithBidirectionalManyToMany) oldChild;
        if (((PersistentCollection) oldChildWithManyToMany.getParents()).wasInitialized()) {
            checkResult(listeners, listeners.getInitializeCollectionListener(), oldChildWithManyToMany, index++);
        }
    }
    checkResult(listeners, listeners.getPreCollectionUpdateListener(), parent, index++);
    checkResult(listeners, listeners.getPostCollectionUpdateListener(), parent, index++);
    if (oldChild instanceof ChildWithBidirectionalManyToMany) {
        checkResult(listeners, listeners.getPreCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) oldChild, index++);
        checkResult(listeners, listeners.getPostCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) oldChild, index++);
    }
    checkNumberOfResults(listeners, index);
}
Also used : PersistentCollection(org.hibernate.collection.spi.PersistentCollection) Transaction(org.hibernate.Transaction) ChildWithBidirectionalManyToMany(org.hibernate.test.event.collection.association.bidirectional.manytomany.ChildWithBidirectionalManyToMany) Session(org.hibernate.Session) Test(org.junit.Test)

Example 8 with ChildWithBidirectionalManyToMany

use of org.hibernate.test.event.collection.association.bidirectional.manytomany.ChildWithBidirectionalManyToMany in project hibernate-orm by hibernate.

the class AbstractCollectionEventTest method testMoveChildToDifferentParent.

@Test
public void testMoveChildToDifferentParent() {
    CollectionListeners listeners = new CollectionListeners(sessionFactory());
    ParentWithCollection parent = createParentWithOneChild("parent", "child");
    ParentWithCollection otherParent = createParentWithOneChild("otherParent", "otherChild");
    Child child = (Child) parent.getChildren().iterator().next();
    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());
    if (child instanceof Entity) {
        child = (Child) s.get(child.getClass(), ((Entity) child).getId());
    }
    parent.removeChild(child);
    otherParent.addChild(child);
    tx.commit();
    s.close();
    int index = 0;
    if (((PersistentCollection) parent.getChildren()).wasInitialized()) {
        checkResult(listeners, listeners.getInitializeCollectionListener(), parent, index++);
    }
    if (child instanceof ChildWithBidirectionalManyToMany) {
        checkResult(listeners, listeners.getInitializeCollectionListener(), (ChildWithBidirectionalManyToMany) child, index++);
    }
    if (((PersistentCollection) otherParent.getChildren()).wasInitialized()) {
        checkResult(listeners, listeners.getInitializeCollectionListener(), otherParent, index++);
    }
    checkResult(listeners, listeners.getPreCollectionUpdateListener(), parent, index++);
    checkResult(listeners, listeners.getPostCollectionUpdateListener(), parent, index++);
    checkResult(listeners, listeners.getPreCollectionUpdateListener(), otherParent, index++);
    checkResult(listeners, listeners.getPostCollectionUpdateListener(), otherParent, index++);
    if (child instanceof ChildWithBidirectionalManyToMany) {
        checkResult(listeners, listeners.getPreCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) child, index++);
        checkResult(listeners, listeners.getPostCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) child, index++);
    }
    checkNumberOfResults(listeners, index);
}
Also used : PersistentCollection(org.hibernate.collection.spi.PersistentCollection) Transaction(org.hibernate.Transaction) ChildWithBidirectionalManyToMany(org.hibernate.test.event.collection.association.bidirectional.manytomany.ChildWithBidirectionalManyToMany) Session(org.hibernate.Session) Test(org.junit.Test)

Example 9 with ChildWithBidirectionalManyToMany

use of org.hibernate.test.event.collection.association.bidirectional.manytomany.ChildWithBidirectionalManyToMany in project hibernate-orm by hibernate.

the class AbstractCollectionEventTest method testUpdateParentOneChildDiffCollectionSameChild.

@Test
public void testUpdateParentOneChildDiffCollectionSameChild() {
    CollectionListeners listeners = new CollectionListeners(sessionFactory());
    ParentWithCollection parent = createParentWithOneChild("parent", "child");
    Child child = (Child) parent.getChildren().iterator().next();
    listeners.clear();
    assertEquals(1, parent.getChildren().size());
    Session s = openSession();
    Transaction tx = s.beginTransaction();
    parent = (ParentWithCollection) s.get(parent.getClass(), parent.getId());
    if (child instanceof Entity) {
        child = (Child) s.get(child.getClass(), ((Entity) child).getId());
    }
    Collection oldCollection = parent.getChildren();
    parent.newChildren(createCollection());
    parent.addChild(child);
    tx.commit();
    s.close();
    int index = 0;
    if (((PersistentCollection) oldCollection).wasInitialized()) {
        checkResult(listeners, listeners.getInitializeCollectionListener(), parent, oldCollection, index++);
    }
    if (child instanceof ChildWithBidirectionalManyToMany) {
        ChildWithBidirectionalManyToMany childWithManyToMany = (ChildWithBidirectionalManyToMany) child;
        if (((PersistentCollection) childWithManyToMany.getParents()).wasInitialized()) {
            checkResult(listeners, listeners.getInitializeCollectionListener(), childWithManyToMany, index++);
        }
    }
    checkResult(listeners, listeners.getPreCollectionRemoveListener(), parent, oldCollection, index++);
    checkResult(listeners, listeners.getPostCollectionRemoveListener(), parent, oldCollection, index++);
    if (child instanceof ChildWithBidirectionalManyToMany) {
        // hmmm, the same parent was removed and re-added to the child's collection;
        // should this be considered an update?
        checkResult(listeners, listeners.getPreCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) child, index++);
        checkResult(listeners, listeners.getPostCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) child, index++);
    }
    checkResult(listeners, listeners.getPreCollectionRecreateListener(), parent, index++);
    checkResult(listeners, listeners.getPostCollectionRecreateListener(), parent, index++);
    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 10 with ChildWithBidirectionalManyToMany

use of org.hibernate.test.event.collection.association.bidirectional.manytomany.ChildWithBidirectionalManyToMany in project hibernate-orm by hibernate.

the class AbstractAssociationCollectionEventTest method testDeleteParentButNotChild.

@Test
public void testDeleteParentButNotChild() {
    CollectionListeners listeners = new CollectionListeners(sessionFactory());
    ParentWithCollection parent = createParentWithOneChild("parent", "child");
    ChildEntity child = (ChildEntity) parent.getChildren().iterator().next();
    listeners.clear();
    Session s = openSession();
    Transaction tx = s.beginTransaction();
    parent = (ParentWithCollection) s.get(parent.getClass(), parent.getId());
    child = (ChildEntity) s.get(child.getClass(), child.getId());
    parent.removeChild(child);
    s.delete(parent);
    tx.commit();
    s.close();
    int index = 0;
    checkResult(listeners, listeners.getInitializeCollectionListener(), parent, index++);
    if (child instanceof ChildWithBidirectionalManyToMany) {
        checkResult(listeners, listeners.getInitializeCollectionListener(), (ChildWithBidirectionalManyToMany) child, index++);
    }
    checkResult(listeners, listeners.getPreCollectionRemoveListener(), parent, index++);
    checkResult(listeners, listeners.getPostCollectionRemoveListener(), parent, index++);
    if (child instanceof ChildWithBidirectionalManyToMany) {
        checkResult(listeners, listeners.getPreCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) child, index++);
        checkResult(listeners, listeners.getPostCollectionUpdateListener(), (ChildWithBidirectionalManyToMany) child, index++);
    }
    checkNumberOfResults(listeners, index);
}
Also used : CollectionListeners(org.hibernate.test.event.collection.CollectionListeners) Transaction(org.hibernate.Transaction) ChildWithBidirectionalManyToMany(org.hibernate.test.event.collection.association.bidirectional.manytomany.ChildWithBidirectionalManyToMany) ChildEntity(org.hibernate.test.event.collection.ChildEntity) ParentWithCollection(org.hibernate.test.event.collection.ParentWithCollection) Session(org.hibernate.Session) Test(org.junit.Test) AbstractCollectionEventTest(org.hibernate.test.event.collection.AbstractCollectionEventTest)

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