StartEnd startEnd, UnidirLevel unidirLevel1,
UnidirLevel unidirLevel2, int count) throws Exception {
pojo.setVal("yar");
bidir1.setChildVal("yam1");
bidir2.setChildVal("yam2");
UnidirTop unidir1 = newUnidir(unidirLevel1);
UnidirTop unidir2 = newUnidir(unidirLevel2);
unidir2.setName("max");
unidir2.setStr("another str");
HasKeyPkJPA hasKeyPk1 = new HasKeyPkJPA(nextNamedKey());
HasKeyPkJPA hasKeyPk2 = new HasKeyPkJPA(nextNamedKey());
hasKeyPk2.setStr("yar 2");
pojo.getUnidirChildren().add(unidir1);
pojo.getUnidirChildren().add(unidir2);
pojo.getHasKeyPks().add(hasKeyPk1);
pojo.getHasKeyPks().add(hasKeyPk2);
pojo.getBidirChildren().add(bidir1);
pojo.getBidirChildren().add(bidir2);
startEnd.start();
em.persist(pojo);
startEnd.end();
assertCountsInDatastore(pojo.getClass(), bidir1.getClass(), count, count + 1);
String bidir1Id = bidir1.getId();
String unidir1Id = unidir1.getId();
Key hasKeyPk1Key = hasKeyPk1.getId();
pojo.getBidirChildren().remove(bidir1);
pojo.getUnidirChildren().remove(unidir1);
pojo.getHasKeyPks().remove(hasKeyPk1);
startEnd.start();
em.merge(pojo);
startEnd.end();
startEnd.start();
pojo = em.find(pojo.getClass(), pojo.getId());
assertNotNull(pojo.getId());
assertEquals(1, pojo.getUnidirChildren().size());
assertEquals(1, pojo.getHasKeyPks().size());
assertEquals(1, pojo.getBidirChildren().size());
assertNotNull(bidir2.getId());
assertNotNull(bidir2.getParent());
assertNotNull(unidir2.getId());
assertNotNull(hasKeyPk2.getId());
assertEquals(bidir2.getId(), pojo.getBidirChildren().iterator().next().getId());
assertEquals(hasKeyPk2.getId(), pojo.getHasKeyPks().iterator().next().getId());
assertEquals(unidir2.getId(), pojo.getUnidirChildren().iterator().next().getId());
Entity pojoEntity = ds.get(KeyFactory.stringToKey(pojo.getId()));
assertNotNull(pojoEntity);
assertEquals(4, pojoEntity.getProperties().size());
assertEquals(Collections.singletonList(KeyFactory.stringToKey(bidir2.getId())), pojoEntity.getProperty("bidirChildren"));
assertEquals(Collections.singletonList(KeyFactory.stringToKey(unidir2.getId())), pojoEntity.getProperty("unidirChildren"));
assertEquals(Collections.singletonList(hasKeyPk2.getId()), pojoEntity.getProperty("hasKeyPks"));
startEnd.end();
try {
ds.get(KeyFactory.stringToKey(bidir1Id));
fail("expected EntityNotFoundException");
} catch (EntityNotFoundException enfe) {
// good
}
try {
ds.get(KeyFactory.stringToKey(unidir1Id));
fail("expected EntityNotFoundException");
} catch (EntityNotFoundException enfe) {
// good
}
try {
ds.get(hasKeyPk1Key);
fail("expected EntityNotFoundException");
} catch (EntityNotFoundException enfe) {
// good
}
Entity bidirChildEntity = ds.get(KeyFactory.stringToKey(bidir2.getId()));
assertNotNull(bidirChildEntity);
assertEquals(bidir2.getClass().getName(), bidirChildEntity.getProperty("DTYPE"));
assertEquals(bidir2.getPropertyCount(), bidirChildEntity.getProperties().size());
assertEquals("yam2", bidirChildEntity.getProperty("childVal"));
assertEquals(KeyFactory.stringToKey(bidir2.getId()), bidirChildEntity.getKey());
assertKeyParentEquals(pojo.getId(), bidirChildEntity, bidir2.getId());
Entity unidirEntity = ds.get(KeyFactory.stringToKey(unidir2.getId()));
assertNotNull(unidirEntity);
assertEquals("max", unidirEntity.getProperty("name"));
assertEquals("another str", unidirEntity.getProperty("str"));
assertEquals(KeyFactory.stringToKey(unidir2.getId()), unidirEntity.getKey());
assertKeyParentEquals(pojo.getId(), unidirEntity, unidir2.getId());
Entity hasKeyPkEntity = ds.get(hasKeyPk2.getId());
assertNotNull(hasKeyPkEntity);
assertEquals("yar 2", hasKeyPkEntity.getProperty("str"));
assertEquals(hasKeyPk2.getId(), hasKeyPkEntity.getKey());