У меня есть 2 класса, которые сохраняются в хранилище данных Google. Класс продукта, который содержит массив productdetails. теперь мне тяжело вернуть мне архивиста.
Продукт класса является отсоединяемым, и когда я пытаюсь получить доступ к массиву внутри объекта, я получаю сообщение об ошибке:
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 от хранилища данных Google?
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);
}
}
}
Подробная информация о товаре
@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.
}
метод, который я использую, находится в реализации de DAO для возврата объектов с таким массивом.
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;
}