【问题标题】:javax.jdo.JDODetachedFieldAccessException JDO app enginejavax.jdo.JDODetachedFieldAccessException JDO 应用程序引擎
【发布时间】:2012-02-20 16:30:18
【问题描述】:

我收到以下错误:

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

我想如果我 detachCopyAll(stores) 那么我也会分离 商店的元素。不是吗?

我什至尝试了以下但没有运气:

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();

问候,

约翰·戈奇

【问题讨论】:

    标签: google-app-engine jdo


    【解决方案1】:

    我原以为阅读 JDO 文档和 JDO 规范会让您受益更多,尤其是获取计划/组和默认获取组等部分。您的“解决方案”效率低下。

    【讨论】:

    • 好吧,在分离不同实体组中的实体之前,如果可能的话,我想让这个简单的例子首先工作......特别是我什么时候需要分离东西,在使它持久化之后的任何时间如果我需要再次访问它?
    • 默认提取组不允许我提取多值属性。
    猜你喜欢
    • 2012-04-20
    • 1970-01-01
    • 2014-09-02
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2015-02-14
    • 1970-01-01
    相关资源
    最近更新 更多