Google App Engine错误对象管理器已关闭

时间:2010-06-03 18:52:37

标签: google-app-engine

当我尝试使用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()呢?

2 个答案:

答案 0 :(得分:3)

我自己解决了这个问题。我的实体没有@PersistenceCapable(detachable =“true”),所以显然对象不能被deafult分离。

@PersistenceCapable(detachable="true")
public class Item {

...

}

答案 1 :(得分:1)

我也收到了这个错误......

您可以在调用close()之前调用列表的方法大小(); 我认为这是一个尚未修复的错误,因为在其他JPA实现中,相同的代码不会抛出任何异常。