現在是時候對JPA提出問題了。@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如我所料(第二代碼示例),這是否真的有可能或者我應該在每個bean中注入dao類,我想使用持久性?