javax.jdo.JDODetachedFieldAccessException ядро ​​приложения JDO - PullRequest
0 голосов
/ 27 января 2012

Я получаю следующую ошибку:

javax.jdo.JDODetachedFieldAccessException: вы только что попытались получить доступ к полю «admin», но это поле не было отсоединено при отсоединении объекта. Либо не получите доступ к этому полю, либо отсоедините его при отсоединении объекта.

Здесь у меня есть список объектов Store с полями Admin в качестве подкласса.

Я впервые вызываю эту функцию

static List<Store> getStores() {

  PersistenceManager pm = PMF.get().getPersistenceManager();

  Query query = pm.newQuery(XZStore.class);
  List<Store> stores = (List<Store>) query.execute();
  //need to detatch them here
  stores = (List<Store>) pm.detachCopyAll(stores);
  pm.close();
  return stores;    
}

и затем доступ к каждому из полей администратора магазина (store.admin).

Я подумал, что если я отключу CopyAll (магазины), я также откажу от членов элементы магазинов. Разве это не так?

Я даже попробовал следующее, но не повезло:

for (Store store : stores)
  store.setAdmin(pm.detachCopy(store.getAdmin()));

Спасибо

Джон Гош

Я наконец нашел решение. Следующее сработало для меня (отсоединение элемента контейнера не отсоединяет элемент элемент, и я должен был сделать это отдельно).

PersistenceManager pm = PMF.get().getPersistenceManager();

Query query = pm.newQuery(Store.class);
List<Store> stores = (List<Store>) query.execute();
//need to detatch them here
List<Store> detachedStores = new ArrayList<Store>();
for (Store store : stores) {
  Store detachedStore = pm.detachCopy(store);
  AdminUser detachedAdmin = pm.detachCopy(store.getAdmin());
  detachedStore.setAdmin(detachedAdmin);
  detachedStores.add(detachedStore);
}

pm.close();

С уважением,

Джон Гош

1 Ответ

0 голосов
/ 28 января 2012

Я бы подумал, что чтение документов JDO и спецификации JDO принесет вам больше пользы, особенно такие разделы, как планы / группы выборки и группа выборки по умолчанию. Ваше «решение» неэффективно.

...