[
https://issues.apache.org/jira/browse/OPENJPA-1001?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12694681#action_12694681
]
Richard Rak commented on OPENJPA-1001:
--------------------------------------
I've done some more digging around, and the issue *appears* to be:
SelectImpl.wherePrimaryKey(ClassMapping mapping, Column[] toCols,
Column[] fromCols, Object oid, JDBCStore store, PathJoins pj,
SQLBuffer buf, List parmList)
This method is adding the primary key values to the parameter list. It is
adding a NULL value to the parameter list, and is also adding "IS NULL" to the
SQLBuffer.
Then, when SQLBuffer calls setParameters(PreparedStatement ps, List
cacheParams), it is finding that NULL value in the cacheParams list, and is
throwing the IndexOutOfBoundsException when attempting to find the column name
for the null value.
> java.lang.IndexOutOfBoundsException when executing attached test case
> ---------------------------------------------------------------------
>
> Key: OPENJPA-1001
> URL: https://issues.apache.org/jira/browse/OPENJPA-1001
> Project: OpenJPA
> Issue Type: Bug
> Components: jdbc
> Affects Versions: 1.2.1
> Environment: Can reproduce on Max OS X and Linux
> Reporter: Richard Rak
> Attachments: IncompleteRelationshipChildEntity.java,
> IncompleteRelationshipParentEntity.java, IncompleteRelationshipSubclass.java,
> TestIncompleteRelationship.java
>
>
> I am hitting the following exception when executing the given test case:
> Caused by: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
> at java.util.ArrayList.RangeCheck(ArrayList.java:546)
> at java.util.ArrayList.get(ArrayList.java:321)
> at
> org.apache.openjpa.jdbc.sql.SQLBuffer.setParameters(SQLBuffer.java:615)
> at
> org.apache.openjpa.jdbc.sql.SQLBuffer.prepareStatement(SQLBuffer.java:515)
> at
> org.apache.openjpa.jdbc.sql.SQLBuffer.prepareStatement(SQLBuffer.java:471)
> at
> org.apache.openjpa.jdbc.sql.SelectImpl.prepareStatement(SelectImpl.java:463)
> at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:379)
> at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:325)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.getInitializeStateResult(JDBCStoreManager.java:503)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:322)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:278)
> at
> org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:111)
> at
> org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
> at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:894)
> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:852)
> ... 53 more
> <openjpa-1.2.1-rexported nonfatal general error>
> org.apache.openjpa.persistence.PersistenceException: Index: 1, Size: 1
> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:875)
> at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:774)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.find(JDBCStoreManager.java:951)
> at
> org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.load(RelationFieldStrategy.java:609)
> at org.apache.openjpa.jdbc.meta.FieldMapping.load(FieldMapping.java:819)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:688)
> 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:2921)
> at
> org.apache.openjpa.kernel.StateManagerImpl.loadField(StateManagerImpl.java:2999)
> at
> org.apache.openjpa.kernel.StateManagerImpl.fetchObjectField(StateManagerImpl.java:2242)
> at
> org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.delete(RelationFieldStrategy.java:256)
> at
> org.apache.openjpa.jdbc.meta.FieldMapping.delete(FieldMapping.java:589)
> at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.delete(AbstractUpdateManager.java:238)
> at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.delete(AbstractUpdateManager.java:252)
> at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java:143)
> at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:85)
> at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:717)
> at
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
> at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2010)
> at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1908)
> at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1679)
> at org.apache.openjpa.kernel.QueryImpl.isInMemory(QueryImpl.java:956)
> at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:796)
> at org.apache.openjpa.kernel.QueryImpl.deleteAll(QueryImpl.java:872)
> at org.apache.openjpa.kernel.QueryImpl.deleteAll(QueryImpl.java:868)
> at
> org.apache.openjpa.kernel.DelegatingQuery.deleteAll(DelegatingQuery.java:541)
> at
> org.apache.openjpa.persistence.QueryImpl.executeUpdate(QueryImpl.java:331)
> at
> org.apache.openjpa.persistence.test.PersistenceTestCase.clear(PersistenceTestCase.java:232)
> at
> org.apache.openjpa.persistence.test.PersistenceTestCase.clear(PersistenceTestCase.java:205)
> at
> org.apache.openjpa.persistence.test.SingleEMFTestCase.tearDown(SingleEMFTestCase.java:71)
> at junit.framework.TestCase.runBare(TestCase.java:130)
> ...
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.