私には3つのクラスがあります:Person、Car、Modelです。ArrayIndexOutOfBoundsException継承を利用するオブジェクトのArrayListを永続化しようとしています
人は、ArrayListのプロパティが定義されています:
List<Car> cars;
車は、クラスモデルが伸びる抽象クラス、すなわちです
@PersistenceCapable
public class Model extends Car {
public Model() {
}
}
私はPersonオブジェクトをロードして、すなわち、新しい車のオブジェクトを作成します。
@PersistenceCapable
@Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE)
public abstract class Car {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
protected Key key;
public Car() {
}
}
モデルカーを拡張します
Person personObj = pm.getObjectById(Person.class, key);
Car newCar = new Model();
私はPersonクラスの "cars"プロパティに新しいCarを追加することによって新しいCarを維持しようとします。 http://groups.google.com/group/google-appengine-java/browse_thread/thread/adf298a9a5b4bd03
は、他の誰がこの問題を見ている:
はjava.lang.ArrayIndexOutOfBoundsException: 0
at org.datanucleus.store.mapped.scostore.FKListStore.<init>(FKListStore.java:133)
at org.datanucleus.store.appengine.DatastoreFKListStore.<init>(DatastoreFKListStore.java:41)
at org.datanucleus.store.appengine.DatastoreManager.newFKListStore(DatastoreManager.java:528)
at org.datanucleus.store.mapped.MappedStoreManager.getBackingStoreForCollection(MappedStoreManager.java:729)
at org.datanucleus.store.mapped.MappedStoreManager.getBackingStoreForField(MappedStoreManager.java:646)
at org.datanucleus.sco.backed.List.<init>(List.java:104)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance_(Runtime.java:112)
at com.google.appengine.tools.development.agent.runtime.Runtime.newInstance(Runtime.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.replaceFieldWithWrapper(AbstractContainerMapping.java:426)
at org.datanucleus.store.mapped.mapping.CollectionMapping.postInsert(CollectionMapping.java:165)
at org.datanucleus.store.appengine.DatastoreRelationFieldManager.runPostInsertMappingCallbacks(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.storeRelations(DatastoreRelationFieldManager.java:81)
at org.datanucleus.store.appengine.DatastoreFieldManager.storeRelations(DatastoreFieldManager.java:955)
at org.datanucleus.store.appengine.DatastorePersistenceHandler.storeRelations(DatastorePersistenceHandler.java:546)
at org.datanucleus.store.appengine.DatastorePersistenceHandler.insertPostProcess(DatastorePersistenceHandler.java:304)
at org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects(DatastorePersistenceHandler.java:256)
at org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject(DatastorePersistenceHandler.java:240)
at org.datanucleus.state.JDOStateManagerImpl.internalMakePersistent(JDOStateManagerImpl.java:3185)
at org.datanucleus.state.JDOStateManagerImpl.makePersistent(JDOStateManagerImpl.java:3161)
at org.datanucleus.ObjectManagerImpl.persistObjectInternal(ObjectManagerImpl.java:1298)
at org.datanucleus.ObjectManagerImpl.persistObject(ObjectManagerImpl.java:1170)
at org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:669)
at org.datanucleus.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:694)
これはずっとここに上げた同様の質問のように聞こえる:私がしようとすると、
personObj.getCars().add(newCar);
しかし、このApp Engineは、次の例外がスローされます前?私が理解から
おかげ
'cars 'がnullの場合、彼は' NullPointerException'を取得します。 –