当我尝试使用EL在JSP页面中迭代列表时,我收到了来自Google App Engine的错误。
Object Manager has been closed
我用下面的代码解决了问题,但我认为这不是解决这个问题的好方法:
public List<Item> getItems() {
PersistenceManager pm = getPersistenceManager();
Query query = pm.newQuery("select from " + Item.class.getName());
List<Item> items = (List<Items>) query.execute();
List<Item> items2 = new ArrayList<Item>(); // This line solved my problem
Collections.copy(items, items2); // and this also
pm.close();
return (List<Item>) items;
}
当我尝试使用pm.detachCopyAll(items)时,它给出了同样的错误。我知道detachCopyAll()方法应该和我做的一样,但是这个方法应该是数据nucelus的一部分,所以应该使用它而不是我的owm方法。那么为什么不要分离ClaopyAll()呢?
答案 0 :(得分:3)
@PersistenceCapable(detachable="true")
public class Item {
...
}
答案 1 :(得分:1)
我也收到了这个错误......
您可以在调用close()之前调用列表的方法大小(); 我认为这是一个尚未修复的错误,因为在其他JPA实现中,相同的代码不会抛出任何异常。