Как перебирать JPA-коллекции в движке Google App - PullRequest
1 голос
/ 31 мая 2010

Я использую Google App Engine с датануклеусом и JPA. Мне очень трудно понять, как я должен читать вещи из хранилища данных и передавать их в JSP. Если я загружаю список POJO с помощью entitymanager и передаю его в JSP, он вылетает в org.datanucleus.exceptions.NucleusUserException: Менеджер объектов был закрыт.

Я понимаю, почему это происходит. Очевидно, потому что я выбираю список, закрываю менеджер сущностей и передаю его в JSP, и в этот момент происходит сбой, потому что список ленив. Как мне сделать список NOT ленивым, не прибегая к таким хакам, как вызов 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();
    }
}

1 Ответ

1 голос
/ 01 июня 2010

Согласно этой теме , DataNucleus сам предоставляет механизмы для чтения запроса результаты, когда транзакция фиксируется. Скорее всего, он еще не реализован в плагине . Об этом сообщается в выпуске 24 , и до тех пор, пока эта проблема не будет решена, я понимаю, что вам придется либо вызвать size(), чтобы загрузить список, либо использовать шаблон OpenEntityManagerInView.

...