Sorry, I did not see that your child class was inherited from another class. I tried using inheritance with JDO some times ago. Unsuccessfully : this is not supported by JDO yet.
See http://code.google.com/intl/fr-FR/appengine/docs/java/datastore/dataclasses. html#Inheritance On 24/09/10 01:30, "lisandrodc" <lisandr...@gmail.com> wrote: > Hi!Cyrille I add a primary key in my child class: > > @PersistenceCapable(identityType = > IdentityType.APPLICATION,detachable="true") > public class RegFechaUsuario extends Fecha { > @PrimaryKey > @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) > private Key id; > @Persistent > private int puntos; > @Persistent > private Long idUsuarioFecha; > @Persistent > private Long idFechaOriginal; > > > And the exception is: > > Error in meta-data for model.RegFechaUsuario: More than one > primary key field. > > Caused by: > > Error in meta-data for model.RegFechaUsuario: More than one primary > key field. > org.datanucleus.store.appengine.MetaDataValidator > $DatastoreMetaDataException: Error in meta-data for > model.RegFechaUsuario: More than one primary key field. > at > org.datanucleus.store.appengine.MetaDataValidator.validatePrimaryKey(MetaDataV > alidator.java: > 416) > at > org.datanucleus.store.appengine.MetaDataValidator.validate(MetaDataValidator.j > ava: > 120) > at > org.datanucleus.store.appengine.DatastoreManager.validateMetaDataForClass(Data > storeManager.java: > 766) > at > org.datanucleus.store.appengine.DatastorePersistenceHandler.insertPreProcess(D > atastorePersistenceHandler.java: > 328) > at > org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects(Data > storePersistenceHandler.java: > 251) > at > org.datanucleus.store.appengine.BatchPutManager.processBatchState(BatchPutMana > ger.java: > 35) > at > org.datanucleus.store.appengine.BatchManager.finish(BatchManager.java: > 54) > at org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManager > $BatchManagerWrapper.call(DatastoreJDOPersistenceManager.java:127) > at org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManager > $BatchManagerWrapper.access$200(DatastoreJDO > > On 23 sep, 05:25, Cyrille Vincey <crll...@gmail.com> wrote: >> There is no primary key in your child class. >> Add one. >> >> On 23/09/10 04:40, "lisandrodc" <lisandr...@gmail.com> wrote: >> >> >> >>> Hi ! I have a problem when persist a chid class. >>> The parent class: >> >>> @PersistenceCapable >> >>> @Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE) >>> public abstract class Fecha { >> >>> @PrimaryKey >>> @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) >>> private Key id; >>> @Persistent >>> private String nombre; >>> @Persistent >>> private Date fechaIni; >>> @Persistent >>> private Date fechaFin; >> >>> @Persistent(defaultFetchGroup = "true") >>> List<Partido> partidos; >> >>> private Long id2; >> >>> private Long kind; >> >>> The child class: >>> @PersistenceCapable(identityType = >>> IdentityType.APPLICATION,detachable="true") >>> public class RegFechaUsuario extends Fecha { >> >>> @Persistent >>> private int puntos; >>> @Persistent >>> private Long idUsuarioFecha; >>> @Persistent >>> private Long idFechaOriginal; >> >>> The method at persist: >> >>> public void crearRegFechaUsuario(RegFechaUsuario regFechaUsuario) { >>> //regFechaUsuario is an object initialized >>> Transaction tx = pm.currentTransaction(); >>> try { >>> tx.begin(); >> >>> pm.makePersistentAll(regFechaUsuario); >>> //here is the exception >>> tx.commit(); >>> } finally { >>> // pm.close(); >>> if (tx.isActive()) { >>> tx.rollback(); >>> } >>> } >> >>> } >> >>> And the exception is (internal error of the library of google apps or >>> datanucleus), the cast: >> >>> Problem accessing /Prode/JugarFecha.action. Reason: >> >>> java.lang.Long cannot be cast to java.lang.String >> >>> Caused by: >> >>> java.lang.ClassCastException: java.lang.Long cannot be cast to >>> java.lang.String >>> at >>> org.datanucleus.store.appengine.DatastoreRelationFieldManager.checkForParent >>> Sw >>> itch(DatastoreRelationFieldManager.java: >>> 202) >>> at org.datanucleus.store.appengine.DatastoreRelationFieldManager >>> $1.setObjectViaMapping(DatastoreRelationFieldManager.java:133) >>> at org.datanucleus.store.appengine.DatastoreRelationFieldManager >>> $1.apply(DatastoreRelationFieldManager.java:112) >>> at >>> org.datanucleus.store.appengine.DatastoreRelationFieldManager.storeRelations >>> (D >>> atastoreRelationFieldManager.java: >>> 81) >>> at >>> org.datanucleus.store.appengine.DatastoreFieldManager.storeRelations(Datasto >>> re >>> FieldManager.java: >>> 955) >>> at >>> org.datanucleus.store.appengine.DatastorePersistenceHandler.storeRelations(D >>> at >>> astorePersistenceHandler.java: >>> 546) >>> at >>> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertPostProces >>> s( >>> DatastorePersistenceHandler.java: >>> 304) >>> at >>> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects(Da >>> ta >>> storePersistenceHandler.java: >>> 256) >>> at >>> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject(Dat >>> as >>> torePersistenceHandler.java: >>> 240) >>> at >>> org.datanucleus.state.JDOStateManagerImpl.internalMakePersistent(JDOStateMan >>> ag >>> erImpl.java: >>> 3185) >>> at >>> org.datanucleus.state.JDOStateManagerImpl.makePersistent(JDOStateManagerImpl >>> .j >>> ava: >>> 3161) >>> at >> >> org.datanucleus.ObjectManagerImpl.persistObjectInternal(ObjectManagerImpl.jav >> a> >> :> 1298) >>> at >>> org.datanucleus.sco.SCOUtils.validateObjectForWriting(SCOUtils.java: >>> 1476) >>> at >>> org.datanucleus.store.mapped.scostore.ElementContainerStore.validateElementF >>> or >>> Writing(ElementContainerStore.java: >>> 380) >>> at >>> org.datanucleus.store.mapped.scostore.FKListStore.validateElementForWriting( >>> FK >>> ListStore.java: >>> 609) >>> at >> >> org.datanucleus.store.mapped.scostore.FKListStore.internalAdd(FKListStore.jav >> a> >> : >> >>> 344) >>> at >>> org.datanucleus.store.appengine.DatastoreFKListStore.internalAdd(DatastoreFK >>> Li >>> stStore.java: >>> 146) >>> at >>> org.datanucleus.store.mapped.scostore.AbstractListStore.addAll(AbstractListS >>> to >>> re.java: >>> 128) >>> at >>> org.datanucleus.store.mapped.mapping.CollectionMapping.postInsert(Collection >>> Ma >>> pping.java: >>> 157) >>> at >>> org.datanucleus.store.appengine.DatastoreRelationFieldManager.runPostInsertM >>> ap >>> pingCallbacks(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 >>> (D >>> atastoreRelationFieldManager.java: >>> 81) >>> at >>> org.datanucleus.store.appengine.DatastoreFieldManager.storeRelations(Datasto >>> re >>> FieldManager.java: >>> 955) >>> at >>> org.datanucleus.store.appengine.DatastorePersistenceHandler.storeRelations(D >>> at >>> astorePersistenceHandler.java: >>> 546) >>> at >>> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertPostProces >>> s( >>> DatastorePersistenceHandler.java: >>> 304) >>> at >>> org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects(Da >>> ta >>> storePersistenceHandler.java: >>> 256) >>> at >>> org.datanucleus.store.appengine.BatchPutManager.processBatchState(BatchPutMa >>> na >>> ger.java: >>> 35) >>> at >>> org.datanucleus.store.appengine.BatchManager.finish(BatchManager.java: >>> 54) >>> at org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManager >>> $BatchManagerWrapper.call(DatastoreJDOPersistenceManager.java:127) >>> at org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManager >>> $BatchManagerWrapper.access$200(DatastoreJDOPersistenceManager.java: >>> 121) >>> at >>> org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManager.makePersi >>> st >>> entAll(DatastoreJDOPersistenceManager.java: >>> 98) >>> at >>> org.datanucleus.jdo.JDOPersistenceManager.makePersistentAll(JDOPersistenceMa >>> na >>> ger.java: >>> 703) >>> at >>> controllers.ControladorFecha.crearRegFechaUsuario(ControladorFecha.java: >>> 157) >>> at >>> struts.action.RegistrarJugada.crearFechaParaRegistro(RegistrarJugada.java: >>> 86) >>> at struts.action.RegistrarJugada.registrarJugada(RegistrarJugada.java: >>> 71) >>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>> at >>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: >>> 39) >>> at >>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl >>> .j >>> ava: >>> 25) >>> at java.lang.reflect.Method.invoke(Method.java:597) >>> at >>> com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime. >>> ja >>> va: >>> 100) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionIn >>> vo >>> cation.java: >>> 441) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActi >>> on >>> Invocation.java: >>> 280) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocati >>> on >>> .java: >>> 243) >>> at >>> com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(D >>> ef >>> aultWorkflowInterceptor.java: >>> 165) >>> at >>> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Method >>> Fi >>> lterInterceptor.java: >>> 87) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocati >>> on >>> .java: >>> 237) >>> at >>> com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(Validati >>> on >>> Interceptor.java: >>> 252) >>> at >>> org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.do >>> In >>> tercept(AnnotationValidationInterceptor.java: >>> 68) >>> at >>> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Method >>> Fi >>> lterInterceptor.java: >>> 87) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocati >>> on >>> .java: >>> 237) >>> at >>> com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(Con >>> ve >>> rsionErrorInterceptor.java: >>> 122) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocati >>> on >>> .java: >>> 237) >>> at >>> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(Parame >>> te >>> rsInterceptor.java: >>> 195) >>> at >>> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Method >>> Fi >>> lterInterceptor.java: >>> 87) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocati >>> on >>> .java: >>> 237) >>> at >>> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(Parame >>> te >>> rsInterceptor.java: >>> 195) >>> at >>> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Method >>> Fi >>> lterInterceptor.java: >>> 87) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocati >>> on >>> .java: >>> 237) >>> at >>> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(St >>> at >>> icParametersInterceptor.java: >>> 179) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocati >>> on >>> .java: >>> 237) >>> at >>> org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectI >>> nt >>> erceptor.java: >>> 75) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocati >>> on >>> .java: >>> 237) >>> at >>> org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterce >>> pt >>> or.java: >>> 94) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocati >>> on >>> .java: >>> 237) >>> at >>> org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInt >>> er >>> ceptor.java: >>> 235) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocati >>> on >>> .java: >>> 237) >>> at >>> com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDr >>> iv >>> enInterceptor.java: >>> 89) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocati >>> on >>> .java: >>> 237) >>> at >>> com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(S >>> co >>> pedModelDrivenInterceptor.java: >>> 130) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocati >>> on >>> .java: >>> 237) >>> at >>> org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(Debu >>> gg >>> ingInterceptor.java: >>> 267) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocati >>> on >>> .java: >>> 237) >>> at >>> com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingIn >>> te >>> rceptor.java: >>> 126) >>> at >>> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocati >>> on >>> .java: >>> 237) >>> at >> >> ... >> >> leer más » -- 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.