You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by dw...@apache.org on 2010/03/01 23:15:19 UTC

svn commit: r917754 - /openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestIndex.java

Author: dwoods
Date: Mon Mar  1 22:15:18 2010
New Revision: 917754

URL: http://svn.apache.org/viewvc?rev=917754&view=rev
Log:
OPENJPA-855 Final JPQL Index M2M test updates

Modified:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestIndex.java

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestIndex.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestIndex.java?rev=917754&r1=917753&r2=917754&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestIndex.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestIndex.java Mon Mar  1 22:15:18 2010
@@ -231,7 +231,6 @@
             }
             
             // add the entities
-            log.trace("Adding " + newElements.size() + " of " + elementClassName + " to " + entityClassName);
             em = emf.createEntityManager();
             em.getTransaction().begin();
             for (INameEntity newElement : newElements)
@@ -244,7 +243,6 @@
             em.clear();
 
             // verify the entity was stored
-            log.trace("Verifing the entity was stored");
             IOrderedEntity findEntity = em.find(entityClass, entityId);
             assertNotNull("Found entity just created", findEntity);
             assertEquals("Verify entity id = " + entityId, entityId.intValue(), findEntity.getId());
@@ -275,15 +273,19 @@
             String entityClassName = entityType.getEntityName();
             String elementClassName = elementClass.getName().substring(
                 elementClass.getName().lastIndexOf('.') + 1);
-            Integer entityId = 1;
             
-            // create the entity
-            IOrderedEntity newEntity = (IOrderedEntity)constructNewEntityObject(entityType);
-            newEntity.setId(entityId);
-            // persist the entity
+            // create the EM and transaction
             em = emf.createEntityManager();
             em.getTransaction().begin();
-            em.persist(newEntity);
+
+            // create and persist the entities
+            List<IOrderedEntity> newEntities = new ArrayList<IOrderedEntity>();
+            for (int i=0; i<3; i++) {
+                IOrderedEntity newEntity = (IOrderedEntity)constructNewEntityObject(entityType);
+                newEntity.setId(i);
+                em.persist(newEntity);
+                newEntities.add(newEntity);
+            }
             
             // create and persist the elements
             Constructor<IColumnEntity> elementConstrctor = elementClass.getConstructor(String.class);
@@ -291,27 +293,28 @@
             IColumnEntity newElement;
             for (int i=0; i<Element_Names.length; i++) {
                 newElement = elementConstrctor.newInstance(Element_Names[i]);
-                // add parent relationship
-                newElement.addEntity(newEntity);
+                // add parent relationships
+                newElement.setEntities(newEntities);
                 em.persist(newElement);
                 newElements.add(newElement);
             }
             
-            // update entity with elements
-            log.trace("Adding " + newElements.size() + " of " + elementClassName + " to " + entityClassName);
-            newEntity.setEntities(newElements);
-            em.persist(newEntity);
+            // update entities with elements
+            for (IOrderedEntity newEntity : newEntities) {
+                newEntity.setEntities(newElements);
+                em.persist(newEntity);
+            }
             em.getTransaction().commit();
             em.clear();
 
-            // verify the entity was stored
-            log.trace("Verifing the entity was stored");
-            IOrderedEntity findEntity = em.find(entityClass, entityId);
-            assertNotNull("Found entity just created", findEntity);
-            assertEquals("Verify entity id = " + entityId, entityId.intValue(), findEntity.getId());
-            assertEquals("Verify entity name = " + entityClass.getName(), entityClass.getName(),
-                findEntity.getClass().getName());
-
+            // verify the entities were stored
+            for (int i=0; i<Element_Names.length; i++) {
+                IOrderedEntity findEntity = em.find(entityClass, i);
+                assertNotNull("Found entity just created", findEntity);
+                assertEquals("Verify entity id = " + i, i, findEntity.getId());
+                assertEquals("Verify entity name = " + entityClass.getName(), entityClass.getName(),
+                    findEntity.getClass().getName());
+            }
         } catch (Throwable t) {
             log.error(t);
             throw new RuntimeException(t);
@@ -377,10 +380,10 @@
         if (IOrderedEntity.class.isAssignableFrom(entityType.getEntityClass())) {
             if (INameEntity.class.isAssignableFrom(elementClass)) {
                 log.trace("** Verify INameEntity modifications on IOrderedEntity.");
-                verifyOrderedEntities(entityType, (Class<INameEntity>)elementClass);
+                verifyO2MEntities(entityType, (Class<INameEntity>)elementClass);
             } else if (IColumnEntity.class.isAssignableFrom(elementClass)) {
                 log.trace("** Verify IColumnEntity modifications on IOrderedEntity.");
-                verifyOrderedEntities(entityType, (Class<INameEntity>)elementClass);
+                verifyM2MEntities(entityType, (Class<IColumnEntity>)elementClass);
             } else {
                 fail("verifyEntities(IOrderedEntity) - Unexpected elementClass=" + elementClass.getSimpleName());
             }
@@ -396,8 +399,10 @@
         }
     }
     
-    private <E> void verifyOrderedEntities(JPQLIndexEntityClasses entityType, Class<INameEntity> elementClass)
+    private <E> void verifyO2MEntities(JPQLIndexEntityClasses entityType, Class<INameEntity> elementClass)
     {
+        EntityManager em = null;
+        
         try {
             Class<IOrderedEntity> entityClass = (Class<IOrderedEntity>)Class.forName(entityType.getEntityClassName());
             String entityClassName = entityType.getEntityName();
@@ -409,7 +414,7 @@
                     + Arrays.toString(Element_Names));
             }
             
-            EntityManager em = emf.createEntityManager();
+            em = emf.createEntityManager();
             em.clear();
             int idx = 0;
             for (String expectedEntityName : Element_Names) {
@@ -421,9 +426,8 @@
                     Object oo = res.get(0);
                     assertEquals("  Verify element type is " + elementClass.getName(), elementClass.getName(),
                         oo.getClass().getName());
-                    String name;
                     try {
-                        name = (String) elementClass.getMethod("getName").invoke(oo);
+                        String name = (String) elementClass.getMethod("getName").invoke(oo);
                         assertEquals("  Verify element value is '"
                             + expectedEntityName + "'", expectedEntityName, name);
                     } catch (Exception e) {
@@ -436,11 +440,90 @@
         } catch (Exception e) {
             log.error(e);
             throw new RuntimeException(e);
+        } finally {
+            if (em != null) {
+                em.close();
+                em = null;
+            }
+        }
+    }
+    
+    private <E> void verifyM2MEntities(JPQLIndexEntityClasses entityType, Class<IColumnEntity> elementClass)
+    {
+        EntityManager em = null;
+        
+        try {
+            Class<IOrderedEntity> entityClass = (Class<IOrderedEntity>)Class.forName(entityType.getEntityClassName());
+            String entityClassName = entityType.getEntityName();
+            entityClassName = entityClassName.substring(entityClassName.lastIndexOf('.') + 1);
+            String elementClassName = entityType.getEntityName();
+            elementClassName = elementClassName.substring(elementClassName.lastIndexOf('.') + 1);
+
+            if (log.isTraceEnabled()) {
+                log.trace("Query " + entityClassName + " and verify 'entities' collection has "
+                    + Element_Names.length + " elements in this order: "
+                    + Arrays.toString(Element_Names));
+            }
+            
+            em = emf.createEntityManager();
+            em.clear();
+            int idx = 0, idx2 = 0;
+            for (String expectedEntityName : Element_Names) {
+                Query q = em.createQuery("select w from " + entityClassName
+                    + " o join o.entities w where index(w) = " + idx);
+                List<E> res = (List<E>)q.getResultList();
+                assertEquals("  Verify query returns 1 element for index " + idx, 1, res.size());
+                if (res.size() == 1) {
+                    Object oo = res.get(0);
+                    assertEquals("  Verify element type is " + elementClass.getName(), elementClass.getName(),
+                        oo.getClass().getName());
+                    try {
+                        String name = (String) elementClass.getMethod("getName").invoke(oo);
+                        assertEquals("  Verify element value is '"
+                            + expectedEntityName + "'", expectedEntityName, name);
+                        
+                        if (log.isTraceEnabled()) {
+                            log.trace("Query " + elementClassName + " and verify 'entities' collection content");
+                        }
+                        Query q2 = em.createQuery("select w from " + elementClassName
+                            + " o join o.entities w where index(w) = " + idx2);
+                        List<E> res2 = (List<E>)q.getResultList();
+                        assertEquals("  Verify query returns 1 entity for index " + idx2, 1, res2.size());
+                        if (res2.size() == 1) {
+                            Object oo2 = res2.get(0);
+                            assertEquals("  Verify entity type is " + entityClass.getName(), entityClass.getName(),
+                                oo2.getClass().getName());
+                            try {
+                                String name2 = (String) entityClass.getMethod("getName").invoke(oo2);
+                                assertEquals("  Verify entity value is '"
+                                    + expectedEntityName + "'", expectedEntityName, name);
+                            } catch (Exception e) {
+                                log.error("  Caught unexpected exception:" + e.getMessage());
+                                throw new RuntimeException(e);
+                            }
+                        }
+                    } catch (Exception e) {
+                        log.error("  Caught unexpected exception:" + e.getMessage());
+                        throw new RuntimeException(e);
+                    }
+                }
+                ++idx;
+            }
+        } catch (Exception e) {
+            log.error(e);
+            throw new RuntimeException(e);
+        } finally {
+            if (em != null) {
+                em.close();
+                em = null;
+            }
         }
     }
     
     private <E> void verifyOrderedElements(JPQLIndexEntityClasses entityType)
     {
+        EntityManager em = null;
+        
         try {
             Class<IOrderedEntity> entityClass = (Class<IOrderedEntity>)Class.forName(entityType.getEntityClassName());
             String entityClassName = entityType.getEntityName();
@@ -452,7 +535,7 @@
                     + Arrays.toString(Element_Names));
             }
             
-            EntityManager em = emf.createEntityManager();
+            em = emf.createEntityManager();
             em.clear();
             int idx = 0;
             for (String expectedEntityName : Element_Names) {
@@ -479,6 +562,11 @@
         } catch (Exception e) {
             log.error(e);
             throw new RuntimeException(e);
+        } finally {
+            if (em != null) {
+                em.close();
+                em = null;
+            }
         }
     }