2016-11-01 5 views
0

У меня есть конечная точка, которая считывает данные из базы данных. В результате у меня есть два кластера DAO: DAO1 и DAO2. В DAO1 у меня есть что-то вроде этого:Play Framework: EntityManager закрыт

public MYDO1 get(Long id) { 
    return em.find(MyDO1.class, id); 
} 

В DAO2 у меня есть что-то вроде этого:

public List<MyDO2> getSomething(Long idFromDO1) { 
    CriteriaQuery<MyDO2> criteriaQuery= criteriaBuilder.createQuery(MyDO2.class); 
    Root<MyDO2> root = criteriaQuery.from(MyDO2.class); 
    criteriaQuery.select(root); 
    Predicate p1 ... 
    Predicate p2 ... 

    criteriaQuery.where(myPredicates); 

    Query query = em.createQuery(criteriaQuery); 
    return query.getResultsList(); 
} 

Теперь в моем классе обслуживания, я делаю вызов на двух DAO,. При первом звонке все работает. При втором вызове, однако, я получаю эту ошибку: java.lang.IllegalStateException: EntityManager is closed

Незнакомая часть - это то, что у меня также есть конечная точка для извлечения записи MyDO1, которая вызывает тот же DAO, и она работает.

ответ

0

Класс обслуживания, который не работал, имел @Singleton. Удаление, которое решило проблему.

+0

Я действительно не вижу, как правильно спроектированный одноэлементный класс приведет к повторному использованию закрытого менеджера объектов. Я бы не рассматривал это так быстро, потому что теперь вы ушли с проблемы. – Gimby