이제 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()에서 "그들"에 대한 NullPointerException이 함께 분쇄, 그래서이 I로 @PersistanceContext로 설정되어 있지 않은 것 같습니다 예상했다. 내가 관리 빈에서 사용할 때 잘 작동 @PersistanceContext
: persistance.xml 잘 구성되어 같은
@ManagedBean
@SessionScoped
public class TestBean {
@PersistenceContext(unitName="TestAppPU")
public EntityManager em;
...
testEntitys = em.createQuery("select t from TestEntity t").getResultList();
...
그래서 그것은 본다. 하지만 나는 GenericDAO에 em을 전달하고 싶지 않습니다.
제 질문은 (예상되는 두 번째 코드 샘플) @PersistanceContext를 사용하여 GenericDAO를 수행하는 방법이며, 실제로 가능합니까 아니면 지속성을 사용하려는 모든 빈에서 dao 클래스를 주입해야합니까?