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 <mscw...@gmail.com> 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 google-appengine-java@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to