You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by ss...@apache.org on 2008/09/05 02:04:06 UTC

svn commit: r692307 - in /openjpa/branches/0.9.7-r547073: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ openjpa-kernel/src/main/java/org/apache/openjpa/util/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/a...

Author: ssegu
Date: Thu Sep  4 17:04:06 2008
New Revision: 692307

URL: http://svn.apache.org/viewvc?rev=692307&view=rev
Log:
Merge back 679152 - Fix a bug in which joined classes using an application identity hierarchy couldn't be loaded correctly as an inverse relation.

Added:
    openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/
      - copied from r679152, openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/
    openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/RelationOwner.java
      - copied unchanged from r679152, openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/RelationOwner.java
    openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/SubID.java
      - copied unchanged from r679152, openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/SubID.java
    openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/Subclass.java
      - copied unchanged from r679152, openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/Subclass.java
    openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/SuperID.java
      - copied unchanged from r679152, openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/SuperID.java
    openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/Superclass.java
      - copied unchanged from r679152, openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/Superclass.java
    openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/TestAbstractJoinedAppId.java
      - copied, changed from r679152, openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/TestAbstractJoinedAppId.java
Modified:
    openjpa/branches/0.9.7-r547073/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java
    openjpa/branches/0.9.7-r547073/openjpa-kernel/src/main/java/org/apache/openjpa/util/OpenJPAId.java

Modified: openjpa/branches/0.9.7-r547073/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java
URL: http://svn.apache.org/viewvc/openjpa/branches/0.9.7-r547073/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java?rev=692307&r1=692306&r2=692307&view=diff
==============================================================================
--- openjpa/branches/0.9.7-r547073/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java (original)
+++ openjpa/branches/0.9.7-r547073/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java Thu Sep  4 17:04:06 2008
@@ -189,34 +189,27 @@
                     return null;
             }
         }
-        Object oid = ApplicationIds.fromPKValues(vals, cls);
-        
-        /**
-         * For polymorphic relations,
-         * the type field in the oid is initially set to base type.
-         * If the discriminator value is preset in the current result,
-         * then the type field needs reset based on the discriminator value.
-         * If the discriminator value is not present or invalid,
-         * ignore any exceptions being thrown.
-         */        
+
+        // the oid data is loaded by the base type, but if discriminator data
+        // is present, make sure to use it to construct the actual oid instance
+        // so that we get the correct app id class, etc
+        ClassMapping dcls = cls;
+        if (subs) {
+            res.startDataRequest(cls.getDiscriminator());
+            try {
+                Class dtype = cls.getDiscriminator().getClass(store, cls, res);
+                if (dtype != cls.getDescribedType())
+                  dcls = cls.getMappingRepository().getMapping(dtype, 
+                    store.getContext().getClassLoader(), true); 
+            } catch (Exception e) {
+                // intentionally ignored
+            }
+            res.endDataRequest();  
+        }
+        Object oid = ApplicationIds.fromPKValues(vals, dcls);
         if (oid instanceof OpenJPAId) {
-            Class type = cls.getDescribedType();
-            if (!subs)
-                // non-polymorphic relations
-                ((OpenJPAId) oid).setManagedInstanceType(type);
-            else if (cls.getDiscriminator() != null
-                && !StringUtils.equals("none",
-                    cls.getDiscriminator().getStrategy().getAlias())) {
-                // polymorphic relations
-                res.startDataRequest(cls.getDiscriminator());
-                try {
-                    type = cls.getDiscriminator().getClass(store, cls, res);
-                    ((OpenJPAId) oid).setManagedInstanceType(type, true);
-                } catch (Exception e) {
-                    // intentionally ignored
-                }
-                res.endDataRequest();  
-            } 
+            ((OpenJPAId) oid).setManagedInstanceType(dcls.getDescribedType(), 
+                subs);
         }
         return oid;
     }

Modified: openjpa/branches/0.9.7-r547073/openjpa-kernel/src/main/java/org/apache/openjpa/util/OpenJPAId.java
URL: http://svn.apache.org/viewvc/openjpa/branches/0.9.7-r547073/openjpa-kernel/src/main/java/org/apache/openjpa/util/OpenJPAId.java?rev=692307&r1=692306&r2=692307&view=diff
==============================================================================
--- openjpa/branches/0.9.7-r547073/openjpa-kernel/src/main/java/org/apache/openjpa/util/OpenJPAId.java (original)
+++ openjpa/branches/0.9.7-r547073/openjpa-kernel/src/main/java/org/apache/openjpa/util/OpenJPAId.java Thu Sep  4 17:04:06 2008
@@ -55,7 +55,7 @@
     }
 
     /**
-     * Return the persitent class which this id instance represents.
+     * Return the persistent class which this id instance represents.
      */
     public Class getType() {
         return type;
@@ -73,8 +73,7 @@
      * Set the exact type of the described instance once it is known.
      */
     public void setManagedInstanceType(Class type) {
-        this.type = type;
-        this.subs = false;
+        setManagedInstanceType(type, false);
     }
 
     /**

Copied: openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/TestAbstractJoinedAppId.java (from r679152, openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/TestAbstractJoinedAppId.java)
URL: http://svn.apache.org/viewvc/openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/TestAbstractJoinedAppId.java?p2=openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/TestAbstractJoinedAppId.java&p1=openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/TestAbstractJoinedAppId.java&r1=679152&r2=692307&rev=692307&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/TestAbstractJoinedAppId.java (original)
+++ openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/abstractjoinedappid/TestAbstractJoinedAppId.java Thu Sep  4 17:04:06 2008
@@ -33,8 +33,7 @@
     extends SingleEMFTestCase {
 
     public void setUp() {
-        setUp(Superclass.class, Subclass.class, RelationOwner.class, 
-            DROP_TABLES);
+        setUp(Superclass.class, Subclass.class, RelationOwner.class);
 
         Subclass s = new Subclass();
         s.setId(99);