0

私の Web アプリで突然、人々が私たちの製品を購入できなくなりました。どうすればいいのかわからない。

昨夜、エンジニアの 1 人が@Persistent(親クラスで) 所有されている 1 対多フィールドからタグを誤って削除してしまいました。彼はこれをテストせずに 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;
    ...
}

新しい Published を作成して呼び出すと、次の例外が発生しますpub.getLicensed().add(new Licensed(...))

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)
4

1 に答える 1

0

App Engine のエラーにより、コードをアップロードできなかったようです。GAE が追いつき、新しいコードに切り替えると、すべて正常に動作しました。

記録として、何が修正されたのかはわかりません。@Persistent注釈を追加しただけか、 ではなく に変更Published.idされKeyた可能性がありLongます。

于 2013-02-02T21:21:12.250 に答える