JPAについての質問はnoobにお願いします。@PersistenceContextと静的プロパティ
私は単純なアプリケーションを持っているので、すべてのエンティティのための簡単なDAOクラスを作りたいと思っています。
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.hibernate.Session;
public class GenericDAO implements Serializable {
public GenericDAO() {
}
@PersistenceContext(unitName="TestAppPU")
public static EntityManager em;
public static <T> void save(T smth) {
em.persist(smth);
}
public static <T> void merge(T smth) {
em.merge(smth);
}
public static <T> void remove(T smth) {
em.remove(smth);
em.flush();
}
public static <T> List<T> getAll(Class<T> cls) {
return (List<T>) ((Session) em.getDelegate()).createCriteria(cls).list();
}
}
は、私はそのようにそれを使用しようとしました:
testEntitys =GenericDAO.getAll(TestEntity.class);
をしかし、それはのgetAll()で「EM」についてNullPointerExceptionで押しつぶし、それは私として@PersistanceContextに設定されていないように見えます期待される。
私は、マネージドBeanでそれを使用するときに正常に動作します@PersistanceContext:
@ManagedBean
@SessionScoped
public class TestBean {
@PersistenceContext(unitName="TestAppPU")
public EntityManager em;
...
testEntitys = em.createQuery("select t from TestEntity t").getResultList();
...
persistance.xmlが右のように構成されているようなので、それが見えます。しかし、私はGenericDAOにそれらを渡したくない。
私の期待するところは、@PersistanceContextでGenericDAOを動作させる方法です(2番目のコードサンプル)。これは本当に可能ですか、永続性を使用するすべてのBeanにDAOクラスを注入する必要がありますか?