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 [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.