我将 Google App Engine 与 datanucleus 和 JPA 一起使用。我很难理解我应该如何从数据存储中读取内容并将其传递给 JSP。如果我使用 entitymanager 加载 POJO 列表并将其传递给 JSP,它会崩溃到 org.datanucleus.exceptions.NucleusUserException:对象管理器已关闭。
我明白为什么会这样。显然因为我获取列表,关闭实体管理器并将其传递给 JSP,此时它将失败,因为列表是惰性的。如果不求助于诸如调用 size()之类的技巧,如何使列表不懒惰?
这是我正在尝试做的事情:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("parties", getParties());
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/parties.jsp");
dispatcher.forward(req, resp);
}
private List<Party> getParties(){
EntityManager em = entityManagerProvider.get();
try{
Query query = em.createQuery("SELECT p FROM Party p");
return query.getResultList();
}finally{
em.close();
}
}