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);
}
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);
}
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);
}
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);
}
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);
}
Aggregations