It seems you are not using the latest sdk version (be something pre
1.5.1?).
As of release 1.5.1 polymorphic relationships are supported for the
default inheritance strategy in JDO (new-table for the base class, and
superclass-table for all subclasses) and JPA SingleTable. You may want
to change Car to
@PersistenceCapable
@Discriminator(column = "DISCRIMINATOR")
public abstract class Car {
....
}
and keep Model
@PersistenceCapable
public class Model extends Car {
...
}
Rolf
On 8 Aug., 01:35, mscwd01 <[email protected]> wrote:
> Hey,
>
> I have 3 classes: Person, Car and Model.
>
> Person has an ArrayList property defined:
> List<Car> cars;
>
> Car is an abstract class which class Model extends, I.e.
>
> @PersistenceCapable
> @Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE)
> public abstract class Car {
>
> @PrimaryKey
> @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
> protected Key key;
>
> public Car() {
> }
>
> }
>
> Model extends Car:
>
> @PersistenceCapable
> public class Model extends Car {
>
> public Model() {
> }
>
> }
>
> I load a Person object and create a new Car object, I.e.
>
> Person personObj = pm.getObjectById(Person.class, key);
> Car newCar = new Model();
>
> I then try to persist the new Car by adding it to the "cars" property
> in the Person Class, I.e.
>
> personObj.getCars().add(newCar);
>
> However, when I try this App Engine throws the following exception:
>
> java.lang.ArrayIndexOutOfBoundsException: 0
> at
> org.datanucleus.store.mapped.scostore.FKListStore.<init>(FKListStore.java:
> 133)
> at
> org.datanucleus.store.appengine.DatastoreFKListStore.<init>(DatastoreFKList
> Store.java:
> 41)
> at
> org.datanucleus.store.appengine.DatastoreManager.newFKListStore(DatastoreMa
> nager.java:
> 528)
> at
> org.datanucleus.store.mapped.MappedStoreManager.getBackingStoreForCollectio
> n(MappedStoreManager.java:
> 729)
> at
> org.datanucleus.store.mapped.MappedStoreManager.getBackingStoreForField(Map
> pedStoreManager.java:
> 646)
> at org.datanucleus.sco.backed.List.<init>(List.java:104)
> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
> Method)
> at
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAcce
> ssorImpl.java:
> 39)
> at
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstru
> ctorAccessorImpl.java:
> 27)
> at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
> at
> com.google.appengine.tools.development.agent.runtime.Runtime.newInstance_(R
> untime.java:
> 112)
> at
> com.google.appengine.tools.development.agent.runtime.Runtime.newInstance(Ru
> ntime.java:
> 120)
> at org.datanucleus.util.ClassUtils.newInstance(ClassUtils.java:94)
> at org.datanucleus.sco.SCOUtils.newSCOInstance(SCOUtils.java:164)
> at
> org.datanucleus.store.mapped.mapping.AbstractContainerMapping.replaceFieldW
> ithWrapper(AbstractContainerMapping.java:
> 426)
> at
> org.datanucleus.store.mapped.mapping.CollectionMapping.postInsert(Collectio
> nMapping.java:
> 165)
> at
> org.datanucleus.store.appengine.DatastoreRelationFieldManager.runPostInsert
> MappingCallbacks(DatastoreRelationFieldManager.java:
> 217)
> at
> org.datanucleus.store.appengine.DatastoreRelationFieldManager.access
> $200(DatastoreRelationFieldManager.java:48)
> at org.datanucleus.store.appengine.DatastoreRelationFieldManager
> $1.apply(DatastoreRelationFieldManager.java:116)
> at
> org.datanucleus.store.appengine.DatastoreRelationFieldManager.storeRelation
> s(DatastoreRelationFieldManager.java:
> 81)
> at
> org.datanucleus.store.appengine.DatastoreFieldManager.storeRelations(Datast
> oreFieldManager.java:
> 955)
> at
> org.datanucleus.store.appengine.DatastorePersistenceHandler.storeRelations(
> DatastorePersistenceHandler.java:
> 546)
> at
> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertPostProce
> ss(DatastorePersistenceHandler.java:
> 304)
> at
> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects(D
> atastorePersistenceHandler.java:
> 256)
> at
> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject(Da
> tastorePersistenceHandler.java:
> 240)
> at
> org.datanucleus.state.JDOStateManagerImpl.internalMakePersistent(JDOStateMa
> nagerImpl.java:
> 3185)
> at
> org.datanucleus.state.JDOStateManagerImpl.makePersistent(JDOStateManagerImp
> l.java:
> 3161)
> at
> org.datanucleus.ObjectManagerImpl.persistObjectInternal(ObjectManagerImpl.j
> ava:
> 1298)
> at
> org.datanucleus.ObjectManagerImpl.persistObject(ObjectManagerImpl.java:
> 1170)
> at
> org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceM
> anager.java:
> 669)
> at
> org.datanucleus.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceMana
> ger.java:
> 694)
>
> This sounds much like a similar question that was raised
> here:http://groups.google.com/group/google-appengine-java/browse_thread/th...
>
> Has anyone else seen this issue before?
>
> Thanks
--
You received this message because you are subscribed to the Google Groups
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine-java?hl=en.