You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by fa...@apache.org on 2010/04/14 20:37:31 UTC

svn commit: r934101 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/identity/

Author: faywang
Date: Wed Apr 14 18:37:30 2010
New Revision: 934101

URL: http://svn.apache.org/viewvc?rev=934101&view=rev
Log:
OPENJPA-1627: fix OrderBy with EmbeddedId.

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/JDBCRelatedFieldOrder.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/identity/Library1.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/identity/TestMultipleLevelDerivedIdentity1.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/JDBCRelatedFieldOrder.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/JDBCRelatedFieldOrder.java?rev=934101&r1=934100&r2=934101&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/JDBCRelatedFieldOrder.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/JDBCRelatedFieldOrder.java Wed Apr 14 18:37:30 2010
@@ -76,8 +76,34 @@ class JDBCRelatedFieldOrder
 
     public void order(Select sel, ClassMapping elem, Joins joins) {
         FieldMapping fm = _fm;
-        if (elem != null)
-            fm = elem.getFieldMapping(_fm.getIndex());
+        if (elem != null) {
+            fm = getOrderByField(elem, fm);
+            if (fm == null)
+                fm = elem.getFieldMapping(_fm.getIndex());
+        }
         sel.orderBy(fm.getColumns(), _asc, joins, false);
     }
+    
+    private FieldMapping getOrderByField(ClassMapping elem, FieldMapping fm) {
+        ClassMapping owner = (ClassMapping)_fm.getDefiningMetaData();
+        if (owner.getDescribedType() == elem.getDescribedType())
+            return elem.getFieldMapping(_fm.getIndex());
+        else {
+            FieldMapping fms[] = elem.getFieldMappings();
+            for (int i = 0; i < fms.length; i++) {
+                ValueMapping vm = (ValueMapping)fms[i].getValue();
+                ClassMapping clm = (ClassMapping)vm.getEmbeddedMetaData();
+                if (clm != null) {
+                    if (clm.getDescribedType() == owner.getDescribedType()) {
+                        return owner.getFieldMapping(_fm.getIndex());
+                    } else {
+                        FieldMapping fm1 = getOrderByField(clm, fm);
+                        if (fm1 != null)
+                            return fm1;
+                    }
+                }
+            }
+        }
+        return null;
+    }
 }

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/identity/Library1.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/identity/Library1.java?rev=934101&r1=934100&r2=934101&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/identity/Library1.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/identity/Library1.java Wed Apr 14 18:37:30 2010
@@ -24,8 +24,10 @@ import java.util.Set;
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.Id;
 import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
 import javax.persistence.Table;
 
 import org.apache.openjpa.persistence.jdbc.VersionColumn;
@@ -49,7 +51,8 @@ public class Library1 implements Seriali
     @Column(name="LIBRARY_NAME", nullable = false)
     private String name;
     
-    @OneToMany(cascade = CascadeType.ALL, mappedBy = "library")
+    @OneToMany(fetch=FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "library")
+    @OrderBy(value = "bid.library ASC, bid.name ASC")
     private Set<Book1> books = new HashSet<Book1>();
     
     private String location;

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/identity/TestMultipleLevelDerivedIdentity1.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/identity/TestMultipleLevelDerivedIdentity1.java?rev=934101&r1=934100&r2=934101&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/identity/TestMultipleLevelDerivedIdentity1.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/identity/TestMultipleLevelDerivedIdentity1.java Wed Apr 14 18:37:30 2010
@@ -200,7 +200,14 @@ public class TestMultipleLevelDerivedIde
 	    assertEquals(NUM_PAGES-1, count(Page1.class));
 	}
 
-	
+    public void testOrderBy() {
+        sql.clear();
+        EntityManager em = emf.createEntityManager();
+        Library1 lib = em.find(Library1.class, LIBRARY_NAME);
+        assertNotNull(lib);
+        assertSQLFragnments(sql, "ORDER BY t1.LIBRARY_NAME ASC, t1.BOOK_NAME ASC");
+    }
+    
 	/**
 	 * Create a Library with a Book and three Pages.
 	 */