[
https://issues.apache.org/jira/browse/OPENJPA-562?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sandeep Shrivastava updated OPENJPA-562:
----------------------------------------
Attachment: openjpa-1.1.0-SNAPSHOT-r420667.634150.patch
The patch containing the fix for this issue.
> 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:
> /**
> * <p>Entity used to test parsing of @OrderBy.</p>
> *
> * @author Abe White
> */
> @Entity
> public class OrderByEntity {
> @Id
> private long id;
> private String string;
> @PersistentCollection
> @OrderBy
> private List<String> 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<String> 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.