You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by Kevin Sutter <kw...@gmail.com> on 2007/08/15 15:59:05 UTC
Re: svn commit: r566006 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java openjpa-kernel/src/main/java/org/apache/openjpa/util/OpenJPAId.java
This one works much better! Thank you!
Kevin
On 8/14/07, wisneskid@apache.org <wi...@apache.org> wrote:
>
> Author: wisneskid
> Date: Tue Aug 14 19:24:50 2007
> New Revision: 566006
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=566006
> Log:
> Help Catalina committing OPENJPA-313.2.patch
>
> Modified:
>
> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java
>
> openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/OpenJPAId.java
>
> Modified:
> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java
> URL:
> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java?view=diff&rev=566006&r1=566005&r2=566006
>
> ==============================================================================
> ---
> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java
> (original)
> +++
> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java
> Tue Aug 14 19:24:50 2007
> @@ -30,6 +30,7 @@
> import java.util.Map;
> import java.util.Set;
>
> +import org.apache.commons.lang.StringUtils;
> import org.apache.openjpa.jdbc.kernel.JDBCFetchConfiguration;
> import org.apache.openjpa.jdbc.kernel.JDBCStore;
> import org.apache.openjpa.jdbc.meta.strats.NoneClassStrategy;
> @@ -189,8 +190,34 @@
> }
> }
> Object oid = ApplicationIds.fromPKValues(vals, cls);
> - if (!subs && oid instanceof OpenJPAId)
> - ((OpenJPAId) oid).setManagedInstanceType(cls.getDescribedType
> ());
> +
> + /**
> + * 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.
> + */
> + 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();
> + }
> + }
> return oid;
> }
>
>
> Modified:
> openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/OpenJPAId.java
> URL:
> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/OpenJPAId.java?view=diff&rev=566006&r1=566005&r2=566006
>
> ==============================================================================
> ---
> openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/OpenJPAId.java
> (original)
> +++
> openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/OpenJPAId.java
> Tue Aug 14 19:24:50 2007
> @@ -78,6 +78,14 @@
> }
>
> /**
> + * Set the exact type of the described instance once it is known.
> + */
> + public void setManagedInstanceType(Class type, boolean subs) {
> + this.type = type;
> + this.subs = subs;
> + }
> +
> + /**
> * Return the identity value as an object.
> */
> public abstract Object getIdObject();
>
>
>