2016-11-01 11 views
0

データベースからデータを読み取るエンドポイントがあります。その結果、DAO1とDAO2という2つのDAOクラスがあります。Play Framework:EntityManagerが閉じられています

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(); 
} 

さて、私のサービスクラスでは、私は2つのDAOの呼び出しを行います。DAO2で

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

が、私はこのような何かを持っている:DAO1で 私はこのような何かを持っています。最初の呼び出しですべてが動作します。しかし、2番目の呼び出しでは、私はこのエラーを受け取ります:java.lang.IllegalStateException: EntityManager is closed

見知らぬ人は、同じDAOを呼び出すMyDO1エントリを取得するためのエンドポイントがあり、動作するということです。

答えて

0

動作しなかったサービスクラスは@Singletonでした。それを削除することで問題は解決しました。

+0

適切に設計されたシングルトンクラスが、閉じたエンティティマネージャを再利用する方法を実際には分かりません。私はこれをすぐに解決したものとして扱いません。あなたは問題をなくしました。 – Gimby

関連する問題