Google app engine 拥有一对多现场can';不能突然修改-DatastoreRelationFieldManager.checkForParentSwitch中的ClassCastException

Google app engine 拥有一对多现场can';不能突然修改-DatastoreRelationFieldManager.checkForParentSwitch中的ClassCastException,google-app-engine,google-cloud-datastore,one-to-many,jdo,Google App Engine,Google Cloud Datastore,One To Many,Jdo,我的网络应用突然不允许人们购买我们的产品。我不知道该怎么办 昨晚,我们的一位工程师意外地从一个拥有的一对多字段(在父类中)中删除了@Persistent标记。他在没有测试的情况下将其上传到App Engine服务器。我们收到报告说人们买不到东西,所以我们查看了变化,进入并恢复了@Persistent标签 但是现在,每当代码试图修改该字段时,我们都会得到一个异常 请帮助-我不知道该怎么办-我们已经添加了@Persistent注释-为什么会发生此异常 @PersistenceCapable publ

我的网络应用突然不允许人们购买我们的产品。我不知道该怎么办

昨晚,我们的一位工程师意外地从一个拥有的一对多字段(在父类中)中删除了
@Persistent
标记。他在没有测试的情况下将其上传到App Engine服务器。我们收到报告说人们买不到东西,所以我们查看了变化,进入并恢复了
@Persistent
标签

但是现在,每当代码试图修改该字段时,我们都会得到一个异常

请帮助-我不知道该怎么办-我们已经添加了
@Persistent
注释-为什么会发生此异常

@PersistenceCapable
public class Published {
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    @PrimaryKey
    private Long id;

    ...
    // see note about this field above
    @Persistent(defaultFetchGroup = "true", mappedBy = "pub")
    private List<License> licenses;
    ...
}


@PersistenceCapable
public class License {
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    @PrimaryKey
    private Key id;
    @Persistent
    private Published pub;
    ...
}

看起来应用程序引擎错误阻止我上载代码。一旦GAE赶上并切换到新代码,一切都很好


对于记录,我不确定是什么修复了它-它可能只是添加了
@Persistent
注释,或者它可能正在更改
Published.id
作为
键而不是
长的

列表是默认的Persistent FWIW,因此与此无关
Uncaught exception from servlet
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
    at org.datanucleus.store.appengine.DatastoreRelationFieldManager.checkForParentSwitch(DatastoreRelationFieldManager.java:203)
    at org.datanucleus.store.appengine.DatastoreRelationFieldManager$1.setObjectViaMapping(DatastoreRelationFieldManager.java:134)
    at org.datanucleus.store.appengine.DatastoreRelationFieldManager$1.apply(DatastoreRelationFieldManager.java:113)
    at org.datanucleus.store.appengine.DatastoreRelationFieldManager.storeRelations(DatastoreRelationFieldManager.java:82)
    at org.datanucleus.store.appengine.DatastoreFieldManager.storeRelations(DatastoreFieldManager.java:959)
    at org.datanucleus.store.appengine.DatastorePersistenceHandler.storeRelations(DatastorePersistenceHandler.java:585)
    at org.datanucleus.store.appengine.DatastorePersistenceHandler.insertPostProcess(DatastorePersistenceHandler.java:320)
    at org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObjects(DatastorePersistenceHandler.java:272)
    at org.datanucleus.store.appengine.DatastorePersistenceHandler.insertObject(DatastorePersistenceHandler.java:256)
    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.sco.SCOUtils.validateObjectForWriting(SCOUtils.java:1476)
    at org.datanucleus.store.mapped.scostore.ElementContainerStore.validateElementForWriting(ElementContainerStore.java:380)
    at org.datanucleus.store.mapped.scostore.FKListStore.validateElementForWriting(FKListStore.java:609)
    at org.datanucleus.store.mapped.scostore.FKListStore.internalAdd(FKListStore.java:344)
    at org.datanucleus.store.appengine.DatastoreFKListStore.internalAdd(DatastoreFKListStore.java:146)
    at org.datanucleus.store.mapped.scostore.AbstractListStore.add(AbstractListStore.java:105)
    at org.datanucleus.sco.backed.List.add(List.java:649)
    at (my servlet)