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);