package oracle.toplink.essentials.testing.tests; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.persistence.EntityManager; import junit.extensions.TestSetup; import junit.framework.Test; import junit.framework.TestSuite; import oracle.toplink.essentials.testing.framework.junit.JUnitTestCase; import oracle.toplink.essentials.testing.models.cmp3.advanced.AdvancedTableCreator; import oracle.toplink.essentials.testing.models.cmp3.advanced.Department; import oracle.toplink.essentials.testing.models.cmp3.advanced.Employee; import oracle.toplink.essentials.testing.models.cmp3.advanced.LargeProject; import oracle.toplink.essentials.testing.models.cmp3.advanced.Project; import oracle.toplink.essentials.testing.models.cmp3.advanced.SmallProject; import oracle.toplink.essentials.tools.schemaframework.SchemaManager; public class DeleteAllQueryTest extends JUnitTestCase { public DeleteAllQueryTest() { super(); } public DeleteAllQueryTest(String name) { super(name); } public static Test suite() { TestSuite suite = new TestSuite(DeleteAllQueryTest.class); return new TestSetup(suite) { protected void setUp(){ SchemaManager schemaManager = new SchemaManager(JUnitTestCase.getServerSession()); new AdvancedTableCreator().replaceTables(JUnitTestCase.getServerSession(), schemaManager); } protected void tearDown() { clearCache(); } }; } public void testBulkDeleteWithRelationships() { // setup Employee emp = new Employee("Tom", "Ware"); Project project = new Project(); project.setName("TopLink"); emp.addProject(project); project.addTeamMember(emp); EntityManager em = createEntityManager(); try { em.getTransaction().begin(); em.persist(emp); em.persist(project); em.getTransaction().commit(); } catch (RuntimeException ex){ if (em.getTransaction().isActive()){ em.getTransaction().rollback(); } throw ex; } finally { em.close(); } em = createEntityManager(); em.getTransaction().begin(); try { em.createQuery("DELETE FROM Project p WHERE p.name = :name").setParameter("name", "TopLink").executeUpdate(); em.getTransaction().commit(); } catch (RuntimeException e) { if (em.getTransaction().isActive()){ em.getTransaction().rollback(); } throw e; } finally { em.close(); } //ISSUE: if we do not clear cache, deleted "TopLink" project still exist in the relationship... // clearCache(); em = createEntityManager(); //em.getTransaction().begin(); try { Employee emp1 = em.find(Employee.class, emp.getId()); Collection projects1 = emp1.getProjects(); if (!(projects1 == null || projects1.size() == 0)) { for(Project p : projects1) { System.out.println("Project: " + p.getName()); } fail("projects should be empty"); } //em.getTransaction().commit(); } catch (RuntimeException e) { // if (em.getTransaction().isActive()){ // em.getTransaction().rollback(); // } throw e; } finally { em.close(); } } public static void main(String[] args) { // Now run JUnit. junit.swingui.TestRunner.main(args); } }