1
的数组列表我有2个班,其得到保存在谷歌的数据存储。该产品包含产品细节的阵列列表。现在我很难让ArrayList返回给我。 类产品是可拆卸的,当我尝试存取权限对象内部ArrayList中我得到的错误:JDO分离对象,然后获取该对象
You have just attempted to access field "productDetailsArray" yet this field was not detached when you detached the object. Either dont access this field, or detach it when detaching the object.
任何人都可以解释如何我还可以分离从谷歌的数据存储ArrayList中?
2类即时通讯使用的是
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
public class Product implements Serializable{
private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(Product.class.getName());
@PrimaryKey
@Persistent
private String productNaam;
@Persistent
private String categorie;
@Persistent
private ArrayList<ProductDetails> productDetailsArray = new ArrayList<ProductDetails>();
//getters and setter below.
// I use this methode to fix a error resulting the arraylist from being org.datanucleus.sco.backed.ArrayList
public void fix() {
log.info("Fix()");
ArrayList<ProductDetails> a = new ArrayList<ProductDetails>();
Iterator<ProductDetails> itr = productDetailsArray.iterator();
while (itr.hasNext()) {
ProductDetails p = itr.next();
log.info(p.getPlaats());
a.add(p);
}
}
}
CLASSE产品详细
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
public class ProductDetails implements Serializable{
private static final long serialVersionUID = 1L;
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String encodedKey;
@Persistent
private String winkel, plaats;
@Persistent
private double prijs;
//getters and setters here.
}
我使用的梅索德是德DAO实现返回的对象与有ArrayList的是。
public ArrayList<Product> productList() {
PersistenceManager pm = PmfSingleton.get().getPersistenceManager();
ArrayList<Product> products = new ArrayList<Product>();
try {
products.clear();
pm.currentTransaction().begin();
Extent<Product> ex = pm.getExtent(Product.class, true);
Iterator<Product> itr = ex.iterator();
while(itr.hasNext()) {
Product tempProduct = itr.next();
Product product = pm.detachCopy(tempProduct);
//ArrayList<ProductDetails> pd = new ArrayList<ProductDetails>(product.getProductDetails());
product.fix();
products.add(product);
}
pm.currentTransaction().commit();
ex.closeAll();
} catch (Exception e) {
pm.currentTransaction().rollback();
throw new RuntimeException(e);
} finally {
pm.close();
}
return products;
}
我使用Spring的OpenEntityManagerInViewFilter所以我不期待检索和访问在同一个网页请求时要分离的对象。渴望和获取组是一种选择,但我很好奇为什么我需要。我的猜测是当我改变另一个错误的配置设置时引入的。 – 2012-05-31 15:54:26