Query q = em.createNamedQuery(Bundle.QUERY_FIND_BY_NAME);
q.setParameter("name", name);
assert q.getResultList().size() == 0; // not in the db yet
BundleType bundleType = createBundleType(em, name + "-Type", createResourceType(em));
Bundle b = createBundle(em, name, bundleType);
id = b.getId();
assert id > 0;
assert b.getBundleType().getId() != 0 : "bundleType should have been persisted independently";
assert b.getRepo().getId() != 0 : "bundle's repo should have been cascade persisted with the bundle";
assert b.getName().equals(b.getRepo().getName()) : "bundle's repo should have same name as bundle";
q = em.createNamedQuery(Bundle.QUERY_FIND_BY_NAME);
q.setParameter("name", name);
assert q.getResultList().size() == 1;
assert ((Bundle) q.getSingleResult()).getName().equals(b.getName());
Bundle bFind = em.find(Bundle.class, id);
assert bFind != null;
assert bFind.getId() == b.getId();
assert bFind.getName().equals(b.getName());
assert bFind.getBundleType().equals(b.getBundleType());
assert bFind.equals(b);
assert bFind.hashCode() == b.hashCode();
// clean up - delete our test entity
em.clear();
q = em.createNamedQuery(Bundle.QUERY_FIND_BY_NAME);
q.setParameter("name", b.getName());
Bundle doomed = (Bundle) q.getSingleResult();
doomed = em.getReference(Bundle.class, doomed.getId());
em.remove(doomed);
assert q.getResultList().size() == 0 : "didn't remove the entity";
em.clear();
// make sure we didn't delete the bundle type - it should not be cascade deleted
q = em.createNamedQuery(BundleType.QUERY_FIND_BY_NAME);
q.setParameter("name", bFind.getBundleType().getName());
assert q.getResultList().size() == 1;
BundleType bt = (BundleType) q.getSingleResult();
em.remove(bt);
assert q.getResultList().size() == 0 : "didn't clean up test bundle type";
deleteResourceType(em, bundleType.getResourceType());
em.clear();