Return-Path: Delivered-To: apmail-openjpa-dev-archive@www.apache.org Received: (qmail 88555 invoked from network); 8 Apr 2008 22:40:18 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 8 Apr 2008 22:40:18 -0000 Received: (qmail 10167 invoked by uid 500); 8 Apr 2008 22:40:13 -0000 Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org Received: (qmail 10146 invoked by uid 500); 8 Apr 2008 22:40:13 -0000 Mailing-List: contact dev-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 dev@openjpa.apache.org Received: (qmail 10128 invoked by uid 99); 8 Apr 2008 22:40:13 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 08 Apr 2008 15:40:13 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.140] (HELO brutus.apache.org) (140.211.11.140) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 08 Apr 2008 22:39:28 +0000 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 4F0C6234C0C2 for ; Tue, 8 Apr 2008 15:37:24 -0700 (PDT) Message-ID: <468330200.1207694244311.JavaMail.jira@brutus> Date: Tue, 8 Apr 2008 15:37:24 -0700 (PDT) From: "Patrick Linskey (JIRA)" To: dev@openjpa.apache.org Subject: [jira] Resolved: (OPENJPA-562) NPE when trying to invoke FieldMetada.getOrders() when a PersistenCollection field is being loaded. In-Reply-To: <994957081.1207690644194.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/OPENJPA-562?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Patrick Linskey resolved OPENJPA-562. ------------------------------------- Resolution: Fixed > NPE when trying to invoke FieldMetada.getOrders() when a PersistenCollection field is being loaded. > --------------------------------------------------------------------------------------------------- > > Key: OPENJPA-562 > URL: https://issues.apache.org/jira/browse/OPENJPA-562 > Project: OpenJPA > Issue Type: Bug > Components: kernel > Affects Versions: 1.1.0 > Environment: This error occured on Microsoft Windows XP SP2, Java version = 1.6.0 with mySQL 5.0 Database. > Reporter: Sandeep Shrivastava > Fix For: 1.1.0 > > Attachments: openjpa-1.1.0-SNAPSHOT-r420667.634150.patch > > Original Estimate: 24h > Remaining Estimate: 24h > > Consider the following snippet of an entity definition: > /** > *

Entity used to test parsing of @OrderBy.

> * > * @author Abe White > */ > @Entity > public class OrderByEntity { > @Id > private long id; > private String string; > @PersistentCollection > @OrderBy > private List strings = new ArrayList(); > } > The @PersistentCollection annotation maps the declaration to the default collection table named orderbyentity_strings. The join column name in the container table is also defaulted to orderbyentity_id and the name of the Element column name is defaulted to element. > The test code initially added string elements to the strings list and persisted it. > OrderByEntity pc = new OrderByEntity(); > pc.setId(1L); > pc.getStrings().add("2"); > pc.getStrings().add("1"); > pc.getStrings().add("3"); > On a subsequent load of the persistent collection data by executing the following code, we hit into an NPE. > pc = em.find(OrderByEntity.class, 1L); > List strings = pc.getStrings(); > java.lang.NullPointerException > at org.apache.openjpa.meta.FieldMetaData.getOrders(FieldMetaData.java:1127) > at org.apache.openjpa.jdbc.meta.strats.StoreCollectionFieldStrategy.selectEager(StoreCollectionFieldStrategy.java:207) > at org.apache.openjpa.jdbc.meta.strats.StoreCollectionFieldStrategy.selectEagerJoin(StoreCollectionFieldStrategy.java:171) > at org.apache.openjpa.jdbc.meta.FieldMapping.selectEagerJoin(FieldMapping.java:713) > at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.select(JDBCStoreManager.java:927) > at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:503) > at org.apache.openjpa.kernel.DelegatingStoreManager.load(DelegatingStoreManager.java:116) > at org.apache.openjpa.datacache.DataCacheStoreManager.load(DataCacheStoreManager.java:368) > at org.apache.openjpa.kernel.DelegatingStoreManager.load(DelegatingStoreManager.java:116) > at org.apache.openjpa.kernel.ROPStoreManager.load(ROPStoreManager.java:78) > at org.apache.openjpa.kernel.StateManagerImpl.loadFields(StateManagerImpl.java:2911) > at org.apache.openjpa.kernel.StateManagerImpl.loadField(StateManagerImpl.java:2989) > at kodo.kernel.ProfilingStateManager.loadField(ProfilingStateManager.java:68) > at org.apache.openjpa.kernel.StateManagerImpl.beforeAccessField(StateManagerImpl.java:1489) > at kodo.kernel.ProfilingStateManager.beforeAccessField(ProfilingStateManager.java:49) > at org.apache.openjpa.kernel.StateManagerImpl.accessingField(StateManagerImpl.java:1474) > This problem is reported with OpenJPA version: > $ java org.apache.openjpa.conf.OpenJPAVersion > OpenJPA 1.1.0-SNAPSHOT > version id: openjpa-1.1.0-SNAPSHOT-r420667:634150 > Apache svn revision: 420667:634150 > os.name: Windows XP > os.version: 5.1 > os.arch: x86 > java.version: 1.6.0_05 > java.vendor: BEA Systems, Inc. > The NPE occurs when the FieldMetadata.getOrders() method is invoked when trying to load the data in the strings collection field. The code is trying to get the ClassMetadata for the element type and then check the FieldMetadata is present in the declared fields. It fails because the element data type is java.lang.String and there is no ClassMetadata for it. By simply adding a null check for the returned class metadata this issue I could fix locally. > Here is the outout of the svn diff command. > C:\apache_openjpa_project\openjpa>svn diff > Index: openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java > =================================================================== > --- openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java > (revision 643944) > +++ openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java > (working copy) > @@ -1124,9 +1124,11 @@ > //set "isUsedInOrderBy" to the field > ClassMetaData elemCls = getElement() > .getDeclaredTypeMetaData(); > - FieldMetaData fmd = elemCls.getDeclaredField(decs[i]); > - if (fmd != null) > - fmd.setUsedInOrderBy(true); > + if (elemCls != null) { > + FieldMetaData fmd = elemCls.getDeclaredField(decs[i]); > + if (fmd != null) > + fmd.setUsedInOrderBy(true); > + } > } > _orders = orders; > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.