String name = "testMtoNPolymorphDelete_" + timestamp;
Fish tuna = new Fish(name + "_tuna", 242, "salt");
Fish trout = new Fish(name + "_trout", 52, "fresh water");
Fish goldfish = new Fish(name + "_goldfish", 10, "brackish water");
ODMGGourmet paula = new ODMGGourmet(name + "_paula");
ODMGGourmet candy = new ODMGGourmet(name + "_candy");
ODMGGourmet james = new ODMGGourmet(name + "_james");
ODMGGourmet doris = new ODMGGourmet(name + "_doris");
paula.addFavoriteFood(trout);
candy.addFavoriteFood(tuna);
james.addFavoriteFood(tuna);
doris.addFavoriteFood(tuna);
doris.addFavoriteFood(trout);
doris.addFavoriteFood(goldfish);
/*
we expect one created 'gourment' per store
*/
TransactionExt tx = (TransactionExt) odmg.newTransaction();
tx.begin();
database.makePersistent(paula);
database.makePersistent(james);
database.makePersistent(candy);
database.makePersistent(doris);
tx.commit();
tx.begin();
OQLQuery query = odmg.newOQLQuery();
query.create("select fishs from " + Fish.class.getName() +
" where (name=$1 or name=$2 or name=$3)");
query.bind(tuna.getName());
query.bind(trout.getName());
query.bind(goldfish.getName());
List fishs = (List) query.execute();
tx.commit();
/*
we expect 3 created 'fish'
*/
assertEquals(3, fishs.size());
tx = (TransactionExt) odmg.newTransaction();
tx.begin();
query = odmg.newOQLQuery();
query.create("select gourmets from " + ODMGGourmet.class.getName() +
" where name=$1");
query.bind(doris.getName());
List result = (List) query.execute();
assertEquals("We should found a gourmet_doris", 1, result.size());
ODMGGourmet gourmet_doris = (ODMGGourmet)result.get(0);
assertEquals(name + "_doris", gourmet_doris.getName());
assertEquals(3, gourmet_doris.getFavoriteFood().size());
/*
now we lock main object and add remove a reference object
*/
tx.lock(gourmet_doris, Transaction.WRITE);
List foodList = gourmet_doris.getFavoriteFood();
foodList.remove(0);
//gourmet_doris.setFavoriteFood(foodList);
tx.commit();
query = odmg.newOQLQuery();
query.create("select gourmets from " + ODMGGourmet.class.getName() +
" where name=$1");
query.bind(doris.getName());
tx = (TransactionExt) odmg.newTransaction();
tx.begin();
result = (List) query.execute();
assertEquals("We should found a gourmet_doris", 1, result.size());
gourmet_doris = (ODMGGourmet)result.get(0);
tx.commit();
assertEquals(
"We removed one fish, so doris should only have two entries left",
2, gourmet_doris.getFavoriteFood().size());
}