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.