Hi,

I have a problem when I try to inherit a one-to-many relation ship
from a base entity class.

The following model works fine :

@PersistenceCapable(identityType = IdentityType.APPLICATION)
@Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE)
public abstract class BaseEntity {

        @PrimaryKey
        @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
        private Key key;

        public Key getKey() {
                return key;
        }
}

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Community extends BaseEntity {

        @Persistent
        @Element(dependent = "true")
        private List<SpeciesStats> stats = new ArrayList<SpeciesStats>();

        public List<SpeciesStats> getStats() {
                return stats;
        }

        @Persistent(dependent = "true")
        TackleBox tackleBox;

        public TackleBox getTackleBox() {
                return tackleBox;
        }

        public void setTackleBox(TackleBox tackleBox) {
                this.tackleBox = tackleBox;
        }
}

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class TackleBox extends BaseEntity {
/* some other properties that eventually extend BaseEntity and so on
*/
}

But if I move "private List<SpeciesStats> stats" from Community to
BaseEntity, I get a runtime exception when trying to read a Community
entity :
Caused by: java.lang.NullPointerException
        at org.datanucleus.store.appengine.DatastoreTable.runCallBacks
(DatastoreTable.java:1025)
        at org.datanucleus.store.appengine.DatastoreTable.initializeNonPK
(DatastoreTable.java:391)
        at org.datanucleus.store.appengine.DatastoreTable.buildMapping
(DatastoreTable.java:285)
        at org.datanucleus.store.appengine.DatastoreManager.buildStoreData
(DatastoreManager.java:405)
        at org.datanucleus.store.appengine.DatastoreManager.newStoreData
(DatastoreManager.java:363)
        at org.datanucleus.store.AbstractStoreManager.addClasses
(AbstractStoreManager.java:788)
        at org.datanucleus.store.AbstractStoreManager.addClass
(AbstractStoreManager.java:759)
        at org.datanucleus.store.mapped.MappedStoreManager.getDatastoreClass
(MappedStoreManager.java:358)
        at org.datanucleus.store.appengine.DatastoreManager.getDatastoreClass
(DatastoreManager.java:631)
        at org.datanucleus.store.appengine.query.DatastoreQuery.performExecute
(DatastoreQuery.java:212)
        at org.datanucleus.store.appengine.query.JDOQLQuery.performExecute
(JDOQLQuery.java:85)
        at org.datanucleus.store.query.Query.executeQuery(Query.java:1489)
        at org.datanucleus.store.query.Query.executeWithArray(Query.java:
1371)
        at org.datanucleus.store.query.Query.execute(Query.java:1344)
        at org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:221)

Or trying to persist one :

java.lang.NullPointerException
        at org.datanucleus.store.appengine.DatastoreTable.runCallBacks
(DatastoreTable.java:1025)
        at org.datanucleus.store.appengine.DatastoreTable.initializeNonPK
(DatastoreTable.java:391)
        at org.datanucleus.store.appengine.DatastoreTable.buildMapping
(DatastoreTable.java:285)
        at org.datanucleus.store.appengine.DatastoreManager.buildStoreData
(DatastoreManager.java:405)
        at org.datanucleus.store.appengine.DatastoreManager.newStoreData
(DatastoreManager.java:363)
        at org.datanucleus.store.AbstractStoreManager.addClasses
(AbstractStoreManager.java:788)
        at org.datanucleus.store.AbstractStoreManager.addClass
(AbstractStoreManager.java:759)
        at org.datanucleus.store.mapped.MappedStoreManager.getDatastoreClass
(MappedStoreManager.java:358)
        at org.datanucleus.store.appengine.DatastoreManager.getDatastoreClass
(DatastoreManager.java:631)
        at
org.datanucleus.store.appengine.DatastoreFieldManager.buildMappingConsumer
(DatastoreFieldManager.java:1008)
        at
org.datanucleus.store.appengine.DatastoreFieldManager.buildMappingConsumer
(DatastoreFieldManager.java:998)
        at org.datanucleus.store.appengine.DatastoreFieldManager.<init>
(DatastoreFieldManager.java:133)
        at org.datanucleus.store.appengine.DatastoreFieldManager.<init>
(DatastoreFieldManager.java:167)
        at
org.datanucleus.store.appengine.DatastorePersistenceHandler.insertPreProcess
(DatastorePersistenceHandler.java:316)
        at
org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects
(DatastorePersistenceHandler.java:236)
        at
org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject
(DatastorePersistenceHandler.java:225)
        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:1175)
        at org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent
(JDOPersistenceManager.java:669)
        at org.datanucleus.jdo.JDOPersistenceManager.makePersistent
(JDOPersistenceManager.java:694)

Same thing if Community inherits from another class that have a
List<SpeciesStats> properties, so Community is the only class that
have this property.

What's wrong ? Did I miss something with the anotations ?

Thanks,
Pierre

--

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-j...@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