0

次のように定義されたフィールドにアクセスすると、App Engine で次の例外が発生します。

@Persistent(mappedBy = "shelf")
@Element(dependent = "true")
private List<ShelfData> shelfData = new ArrayList<ShelfData>();

コードを見ると、リストにnullの項目があると思います。すべての挿入がトランザクションでラップされているため、どうやってそこにたどり着いたのかわかりません。ただし、私が本当にやりたいことは、エラーをキャッチすることです (エラーを無視するか、問題のあるアイテムを削除することもできます)。

Uncaught exception from servlet

java.lang.NullPointerException
    at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.doBatchGetBySize(AsyncDatastoreServiceImpl.java:306)
    at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.get(AsyncDatastoreServiceImpl.java:275)
    at com.google.appengine.api.datastore.DatastoreServiceImpl$1.runInternal(DatastoreServiceImpl.java:68)
    at com.google.appengine.api.datastore.DatastoreServiceImpl$1.runInternal(DatastoreServiceImpl.java:65)
    at com.google.appengine.api.datastore.TransactionRunner.runInTransaction(TransactionRunner.java:29)
    at com.google.appengine.api.datastore.DatastoreServiceImpl.get(DatastoreServiceImpl.java:65)
    at com.google.appengine.datanucleus.WrappedDatastoreService.get(WrappedDatastoreService.java:80)
    at com.google.appengine.datanucleus.FetchFieldManager.getCollectionFromDatastoreObject(FetchFieldManager.java:666)
    at com.google.appengine.datanucleus.FetchFieldManager.fetchRelationField(FetchFieldManager.java:483)
    at com.google.appengine.datanucleus.FetchFieldManager.fetchObjectField(FetchFieldManager.java:405)
    at org.datanucleus.state.AbstractStateManager.replacingObjectField(AbstractStateManager.java:2353)
    at com.myapp.model.Shelf.jdoReplaceField(Shelf.java)
    at com.myapp.model.Shelf.jdoReplaceFields(Shelf.java)
    at org.datanucleus.state.JDOStateManager.replaceFields(JDOStateManager.java:1935)
    at org.datanucleus.state.JDOStateManager.replaceFields(JDOStateManager.java:1962)
    at com.google.appengine.datanucleus.DatastorePersistenceHandler.fetchObject(DatastorePersistenceHandler.java:567)
    at org.datanucleus.state.JDOStateManager.loadFieldsFromDatastore(JDOStateManager.java:1638)
    at org.datanucleus.state.JDOStateManager.loadSpecifiedFields(JDOStateManager.java:1240)
    at org.datanucleus.state.JDOStateManager.isLoaded(JDOStateManager.java:1728)
    at com.myapp.model.Shelf.jdoGetshelfData(Shelf.java)
    at com.myapp.model.Shelf.getShelfData(Shelf.java:137)
    ...

データを修正することは明らかに最終的な計画ですが、フィールドにアクセスするとすぐにこのエラーがスローされるため、どうすればよいかわかりません。

4

0 に答える 0