database.makePersistent(it.next());
}
database.makePersistent(movie);
tx.commit();
OQLQuery queryMovie = movieQuery(postfix);
Collection resultMovie = (Collection) queryMovie.execute();
assertEquals(1, resultMovie.size());
Movie newMovie = (Movie) resultMovie.iterator().next();
assertNotNull(newMovie.getActors());
assertEquals(3, newMovie.getActors().size());
OQLQuery queryActor = actorQuery(postfix);
Collection resultActor = (Collection) queryActor.execute();
assertEquals(3, resultActor.size());
OQLQuery queryRole = roleQuery(null, movie);
Collection resultRole = (Collection) queryRole.execute();
assertEquals(3, resultRole.size());
tx.begin();
tx.getBroker().clearCache();
queryMovie = movieQuery(postfix);
resultMovie = (Collection) queryMovie.execute();
assertEquals(1, resultMovie.size());
Movie m = (Movie) resultMovie.iterator().next();
assertNotNull(m);
Collection actors = m.getActors();
assertEquals(3, actors.size());
//***************************************
tx.lock(m, Transaction.WRITE);
/*
now remove an association between Movie ans Actor
we expect that the entry in indirection class will be removed,
but the Actor entry should be still there
*/
Iterator iter = actors.iterator();
iter.next();
iter.remove();
//***************************************
tx.commit();
tx.begin();
tx.getBroker().clearCache();
//tx.commit();
queryMovie = movieQuery(postfix);
resultMovie = (Collection) queryMovie.execute();
assertEquals(1, resultMovie.size());
newMovie = (Movie) resultMovie.iterator().next();
assertNotNull(newMovie.getActors());
assertEquals(2, newMovie.getActors().size());
queryRole = roleQuery(null, movie);
resultRole = (Collection) queryRole.execute();
assertEquals(2, resultRole.size());
// we only remove the association
queryActor = actorQuery(postfix);
resultActor = (Collection) queryActor.execute();