https://issues.apache.org/jira/browse/OPENJPA-953, ok? - What happens next? ;-)
-----Original Message-----
From: Fay Wang [mailto:fyw300@yahoo.com]
Sent: Wednesday, March 04, 2009 6:08 AM
To: users@openjpa.apache.org
Subject: RE: ArrayIndexOutOfBoundsException in org.apache.openjpa.util.ApplicationIds$PrimaryKeyFieldManager.retrieve
Hi Mike,
This seems to be an openjpa bug. Please open a JIRA. Thanks!
-Fay
--- On Tue, 3/3/09, Fay Wang <fyw300@yahoo.com> wrote:
> From: Fay Wang <fyw300@yahoo.com>
> Subject: RE: ArrayIndexOutOfBoundsException in
> org.apache.openjpa.util.ApplicationIds$PrimaryKeyFieldManager.retrieve
> To: users@openjpa.apache.org
> Date: Tuesday, March 3, 2009, 3:26 PM
> Yes, with your test case, I did see the problem. The difference
> between our test cases is that in your test case, you have
> pre-created/populated the tables, while I let openjpa to create and
> populate the tables for me. Let me take a look to see why this causes
> the ArrayIndexOutOfBoundsException.
>
> Regards,
> Fay
>
>
> --- On Tue, 3/3/09, Michael Vorburger
> <mvorburger@odyssey-group.com> wrote:
>
> > From: Michael Vorburger
> <mvorburger@odyssey-group.com>
> > Subject: RE: ArrayIndexOutOfBoundsException in
> org.apache.openjpa.util.ApplicationIds$PrimaryKeyFieldManager.retrieve
> > To: users@openjpa.apache.org
> > Date: Tuesday, March 3, 2009, 2:51 PM Hello Fay,
> >
> > Uhm, I fiddled with the "infrastructure" of
> your
> > ZIP a bit (NO code changed, but Mavenized, added a missing/forgotten
> > persistence.xml, two CREATE TABLE
> and
> > INSERT INTO), and voilà, run a "mvn clean
> test"
> > on the attached updated test package and you'll
> see the
> > problem! Do you confirm?
> >
> > Regards,
> > Michael
> >
> > -----Original Message-----
> > From: Fay Wang [mailto:fyw300@yahoo.com]
> > Sent: Tuesday, March 03, 2009 10:21 PM
> > To: users@openjpa.apache.org
> > Subject: Re: ArrayIndexOutOfBoundsException in
> >
> org.apache.openjpa.util.ApplicationIds$PrimaryKeyFieldManager.retrieve
> >
> > Hmmm. I could not reproduce the error using your
> domain
> > model in 1.2.0 and trunk. Attached is the test case.
> Could
> > you run it to see it passes?
> >
> > Regards,
> > Fay
> >
> >
> >
> > --- On Tue, 3/3/09, Michael Vorburger <mvorburger@odyssey-group.com>
> > wrote:
> >
> > > From: Michael Vorburger
> > <mvorburger@odyssey-group.com>
> > > Subject: ArrayIndexOutOfBoundsException in
> > >
> >
> org.apache.openjpa.util.ApplicationIds$PrimaryKeyFieldManager.retrieve
> > > To: users@openjpa.apache.org
> > > Date: Tuesday, March 3, 2009, 11:57 AM Hello,
> > >
> > > I'm getting a ArrayIndexOutOfBoundsException
> in
> > >
> >
> org.apache.openjpa.util.ApplicationIds$PrimaryKeyFieldManager.retrieve
> > > (A pplicationIds.java:602), full stack trace
> below.
> > >
> > > This occurs when I try to use application ID
> Identity
> > Hierarchies as
> > > per
> > >
> >
> http://openjpa.apache.org/builds/1.2.0/apache-openjpa-1.2.0/docs/manua
> > > l/
> >
> jpa_overview_pc_identity.html#jpa_overview_pc_identity_hierarchy,
> > > may be
> > > because I was trying to use them together with
> > Entities as Identity
> > > Fields as per
> > >
> >
> http://openjpa.apache.org/builds/1.2.0/apache-openjpa-1.2.0/docs/manua
> > > l/
> ref_guide_pc_oid.html#ref_guide_pc_oid_entitypk ...
> > >
> > > Both of this is not JPA 1.0 spec, is it? Will
> this
> > later be possible
> > > via standard in JPA 2.0? Is there a
> "better"
> > (in the sense of spec
> > > compliant) way to do this, or a workaround or
> even
> > better bug fix for
> > > OpenJPA? Here is an attempt to sketch out the
> model
> > that this occurs
> > > with:
> > >
> > > @javax.persistence.Entity(name =
> > "DictLabel")
> > > @IdClass(DictLabelId.class)
> > > @javax.persistence.Table(name =
> > "dict_label_vw")
> > > @javax.persistence.Inheritance(strategy =
> > > InheritanceType.SINGLE_TABLE)
> > >
> @DiscriminatorColumn(name="entity_dict_id",
> > > discriminatorType=DiscriminatorType.INTEGER)
> > > public abstract class DictLabelEntity {
> > >
> > > @Basic(optional = false)
> > > @javax.persistence.Column(name =
> "name",
> > nullable = false) private
> > > String name;
> > >
> > > @Id
> > > @javax.persistence.ManyToOne(cascade =
> > {CascadeType.PERSIST,
> > > CascadeType.MERGE, CascadeType.REFRESH}, fetch
> =
> > FetchType.LAZY,
> > > optional = false)
> @javax.persistence.JoinColumn(name
> > =
> > > "language_dict_id", nullable =
> > > false)
> > > private DictLanguageEntity language;
> > >
> > > @Id
> > > @Basic(optional = false)
> > > @javax.persistence.Column(name =
> > > "entity_dict_id", nullable = false) private long entityRef; }
> > >
> > > @Entity(name = "DictLanguageLabel")
> > > @IdClass(DictLanguageLabelId.class)
> > > @DiscriminatorValue(value="1106")
> > > public class DictLanguageLabelEntity extends
> > DictLabelEntity {
> > >
> > > @Id
> > > @javax.persistence.ManyToOne(cascade =
> > {CascadeType.PERSIST,
> > > CascadeType.MERGE,
> CascadeType.REFRESH},
> > fetch =
> > > FetchType.LAZY, optional = false)
> > > @javax.persistence.JoinColumn(name =
> > "object_dict_id", nullable =
> > > false)
> > > private DictLanguageEntity forLanguage; }
> > >
> > > public abstract class DictLabelId implements
> > Serializable {
> > > public long language;
> > > public long entityRef;
> > > // ... equals() ... hashCode() ...
> > > }
> > >
> > > public class DictLanguageLabelId extends
> DictLabelId {
> > > public long forLanguage;
> > > // ... equals() ... hashCode() ...
> > > }
> > >
> > > With this, a simple query for "SELECT l FROM
> > DictLanguageLabel l"
> > > leads to the exception below.
> > >
> > > The DictLanguageEntity is another entity
> deliberately
> > omitted, it's a
> > > "standard" one with a simple @Id
> private
> > long id.
> > > If this model seems
> > > to make little sense, I have to admit that it is
> > simplified, as in
> > > real life there are other subclasses of
> > DictLabelEntity, where that
> > > object_dict_id is a ManyToOne to other entities
> than
> > > DictLanguageEntity.
> > >
> > > I actually found a work-around, as follows: No
> > DictLanguageLabelId
> > > extends DictLabelId (and no @IdClass on
> > DictLanguageLabelEntity), and
> > > make DictLabelId not abstract. Then add the
> following
> > to the
> > > DictLabelEntity to "double map" that
> > "object_dict_id" column (which is
> > > also mapped in the DictLanguageLabelEntity
> subclass),
> > and remove the
> > > @Id from the forLanguage in
> DictLanguageLabelEntity:
> > >
> > > @Id
> > > @Basic(optional = false)
> > > @javax.persistence.Column(name = "object_dict_id", nullable =
> > > false)
> > > private long objectRef;
> > >
> > > and add a public long objectRef; to the
> DictLabelId
> > (with updated
> > > equals() and hashCode()). seems to work, but is
> > clearly a work-around
> > > for what appears to be a bug...
> > >
> > > Regards,
> > > Michael
> > >
> > > ___
> > > <openjpa-1.2.0-r422266:683325 nonfatal user
> > error>
> > > org.apache.openjpa.persistence.ArgumentException:
> 2
> > at
> > >
> >
> org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:814)
> > > at
> > >
> >
> org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:775)
> > > at
> > >
> >
> org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:771)
> > > at
> > >
> >
> org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java
> > > :5
> > > 17)
> > > at
> > >
> >
> org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:254)
> > > at
> > >
> >
> org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:
> > > 29
> > > 3)
> > > at
> > >
> >
> com.odcgroup.tangij.nls.LabelsDAO.getAllLabels(LabelsDAO.java:38)
> > > at
> > >
> >
> com.odcgroup.tangij.nls.LabelsDAOTest.testLabels(LabelsDAOTest.java:34
> > > ) at
> > sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> > > Method)
> > > at
> > >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.j
> > > av
> > > a:39)
> > > at
> > >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccess
> > > or
> > > Impl.java:25)
> > > at
> java.lang.reflect.Method.invoke(Method.java:597)
> > > at
> > >
> >
> org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
> > > at
> > >
> >
> org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:
> > > 98)
> > > at
> > >
> >
> org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
> > > at
> > >
> >
> org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(M
> > > et
> > > hodRoadie.java:87)
> > > at
> > >
> >
> org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
> > > at
> > >
> >
> org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
> > > at
> > >
> >
> org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4Cl
> > > as
> > > sRunner.java:88)
> > > at
> > >
> >
> org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRun
> > > ne
> > > r.java:51)
> > > at
> > >
> >
> org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.j
> > > av
> > > a:44)
> > > at
> > >
> >
> org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java
> > > :2
> > > 7)
> > > at
> > >
> >
> org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:3
> > > 7)
> > > at
> > >
> >
> org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:
> > > 42)
> > > at
> > >
> >
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4T
> > > es
> > > tReference.java:38)
> > > at
> > >
> >
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.
> > > ja
> > > va:38)
> > > at
> > >
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(Remote
> > > Te
> > > stRunner.java:460)
> > > at
> > >
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(Remote
> > > Te
> > > stRunner.java:673)
> > > at
> > >
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestR
> > > un
> > > ner.java:386)
> > > at
> > >
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTest
> > > Ru
> > > nner.java:196)
> > > Caused by:
> java.lang.ArrayIndexOutOfBoundsException: 2
> > at
> > >
> >
> org.apache.openjpa.util.ApplicationIds$PrimaryKeyFieldManager.retrieve
> > > (A
> > > pplicationIds.java:602)
> > > at
> > >
> >
> org.apache.openjpa.util.ApplicationIds$PrimaryKeyFieldManager.fetchLon
> > > gF
> > > ield(ApplicationIds.java:578)
> > > at
> > >
> >
> com.odcgroup.tangij.domainmodel.DictLanguageLabelEntity.pcCopyKeyField
> > > sT
> > > oObjectId(DictLanguageLabelEntity.java)
> > > at
> > >
> >
> org.apache.openjpa.enhance.PCRegistry.copyKeyFieldsToObjectId(PCRegist
> > > ry
> > > .java:172)
> > > at
> > >
> >
> org.apache.openjpa.util.ApplicationIds.fromPKValues(ApplicationIds.java:
> > > 218)
> > > at
> > >
> >
> org.apache.openjpa.jdbc.meta.ClassMapping.getObjectId(ClassMapping.java:
> > > 213)
> > > at
> > >
> >
> org.apache.openjpa.jdbc.meta.ClassMapping.getObjectId(ClassMapping.java:
> > > 150)
> > > at
> > >
> >
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.
> > > ja
> > > va:910)
> > > at
> > >
> >
> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:27
> > > 8)
> > > at
> > >
> >
> org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.ja
> > > va
> > > :2391)
> > > at
> > >
> >
> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:27
> > > 2)
> > > at
> > >
> >
> org.apache.openjpa.jdbc.kernel.InstanceResultObjectProvider.getResultO
> > > bj
> > > ect(InstanceResultObjectProvider.java:59)
> > > at
> > >
> >
> org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java
> > > :3
> > > 6)
> > > at
> > >
> >
> org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1228)
> > > at
> > >
> >
> org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:990)
> > > at
> > >
> >
> org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:805)
> > > ... 29 more
> > >
> > >
> > >
> >
> ____________________________________________________________
> > >
> > > * This email and any files transmitted with it
> are
> > CONFIDENTIAL and
> > > intended
> > > solely for the use of the individual or entity
> to
> > which they are
> > > addressed.
> > > * Any unauthorized copying, disclosure, or
> > distribution of the
> > > material within
> > > this email is strictly forbidden.
> > > * Any views or opinions presented within this
> e-mail
> > are solely those
> > > of the
> > > author and do not necessarily represent those
> of
> > Odyssey Financial
> > > Technologies SA unless otherwise specifically
> stated.
> > > * An electronic message is not binding on its
> sender.
> > Any message
> > > referring to
> > > a binding engagement must be confirmed in
> writing
> > and duly signed.
> > > * If you have received this email in error,
> please
> > notify the sender
> > > immediately
> > > and delete the original.
> >
> >
> >
> >
> >
> ____________________________________________________________
> >
> > * This email and any files transmitted with it are CONFIDENTIAL and
> > intended
> > solely for the use of the individual or entity to
> which
> > they are addressed.
> > * Any unauthorized copying, disclosure, or
> distribution
> > of the material within
> > this email is strictly forbidden.
> > * Any views or opinions presented within this e-mail
> are
> > solely those of the
> > author and do not necessarily represent those of
> Odyssey
> > Financial
> > Technologies SA unless otherwise specifically stated.
> > * An electronic message is not binding on its
> sender. Any
> > message referring to
> > a binding engagement must be confirmed in writing
> and
> > duly signed.
> > * If you have received this email in error, please
> notify
> > the sender immediately
> > and delete the original.
____________________________________________________________
This email and any files transmitted with it are CONFIDENTIAL and intended
solely for the use of the individual or entity to which they are addressed.
Any unauthorized copying, disclosure, or distribution of the material within
this email is strictly forbidden.
Any views or opinions presented within this e-mail are solely those of the
author and do not necessarily represent those of Odyssey Financial
Technologies SA unless otherwise specifically stated.
An electronic message is not binding on its sender. Any message referring to
a binding engagement must be confirmed in writing and duly signed.
If you have received this email in error, please notify the sender immediately
and delete the original.
|