代码之家  ›  专栏  ›  技术社区  ›  palto

如何在googleappengine中迭代JPA集合

  •  1
  • palto  · 技术社区  · 14 年前

    我将googleappengine与datanucleus和JPA结合使用。我很难理解如何从数据存储中读取数据并将其传递给JSP。如果我用entitymanager加载POJO列表并将其传递给JSP,它将崩溃到org.datanucleus.exceptions.NucleusUserException:Object Manager已经关闭。

    我明白为什么会这样。显然,因为我获取了列表,所以关闭实体管理器并将其传递给JSP,此时它将失败,因为列表是懒惰的。我怎么列这个单子 不是

    @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();
        }
    }
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Pascal Thivent    14 年前

    根据 this thread , 事务提交时的结果。它可能还没有在插件中实现 Issue 24 在这个问题解决之前,我的理解是你要么打电话 size() 加载列表或使用 OpenEntityManagerInView 图案。