Return-Path: Delivered-To: apmail-openjpa-commits-archive@www.apache.org Received: (qmail 67811 invoked from network); 14 Aug 2007 17:38:24 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 14 Aug 2007 17:38:24 -0000 Received: (qmail 8161 invoked by uid 500); 14 Aug 2007 17:38:22 -0000 Delivered-To: apmail-openjpa-commits-archive@openjpa.apache.org Received: (qmail 8150 invoked by uid 500); 14 Aug 2007 17:38:22 -0000 Mailing-List: contact commits-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openjpa.apache.org Delivered-To: mailing list commits@openjpa.apache.org Received: (qmail 8141 invoked by uid 99); 14 Aug 2007 17:38:22 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 14 Aug 2007 10:38:22 -0700 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 14 Aug 2007 17:38:37 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 9FF981A981A; Tue, 14 Aug 2007 10:38:01 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r565845 - /openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java Date: Tue, 14 Aug 2007 17:38:01 -0000 To: commits@openjpa.apache.org From: wisneskid@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070814173801.9FF981A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: wisneskid Date: Tue Aug 14 10:38:00 2007 New Revision: 565845 URL: http://svn.apache.org/viewvc?view=rev&rev=565845 Log: Help Catalina committing OPENJPA-313.r564688.patch Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.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=565845&r1=565844&r2=565845 ============================================================================== --- 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 10:38:00 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,33 @@ } } Object oid = ApplicationIds.fromPKValues(vals, cls); - if (!subs && oid instanceof OpenJPAId) - ((OpenJPAId) oid).setManagedInstanceType(cls.getDescribedType()); + 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())) { + // 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 discriminator value. + // If the discriminator value is not present or invalid, + // ignore any exceptions being thrown. + // The discriminator value can potentially be null in the + // database because the mapping tool does not enforce the + // discriminator column 'not null'. + // We can not prevent other non-jpa applications from inserting + // a null or invalid discriminator value. + res.startDataRequest(cls.getDiscriminator()); + try { + type = cls.getDiscriminator().getClass(store, cls, res); + ((OpenJPAId) oid).setManagedInstanceType(type); + } catch (Exception e) {} + res.endDataRequest(); + } + } return oid; }