2011-01-18 3 views
2

@PersistenceContext (또는 @PersistenceUnit)을 사용하여 jsf 관리 빈에 엔티티 관리자 (또는 해당 팩토리)를 주입 할 수 있습니까?매니지 빈으로 엔티티 관리자 삽입

나는 아무리 시도해도 NullPointerException을 얻는다.

답변

7

예 가능합니다. 이것은 구문입니다.

@PersistenceContext 
EntityManager em; 

프로젝트에 persistence.xml이 있어야합니다. Btw : Glassfish 3을 실행 중입니다.

그런 다음 em.createNamedQuery와 같은 메서드를 사용할 수 있습니다.

또한 생성자가 생성자에서 데이터베이스 함수를 수행하려고하면 삽입이 작동하지 않는다는 점을 기억하십시오. 메소드에 @PostConstruct 주석을 추가해야합니다. 이것은 아마도 당신의 문제 일 것입니다.

+0

감사합니다. 생성자에서 em을 사용했습니다. – Alf

+2

JSF 관리 Bean에 EntityManager를 삽입하면 EntityManager는 컨테이너 관리 트랜잭션 (CMT)을 사용하지 않습니다. Java EE 7까지는 EJB 만 컨테이너 관리 트랜잭션을 사용하고 Java EE 7은 더 이상 사용되지 않는 JSF 관리 Bean이 아닌 CDI Bean에만 CMT를 확장했습니다. 즉, 오류가있는 경우 트랜잭션은 컨테이너에 의해 롤백되지 않으므로 트랜잭션을 롤백해야합니다. [참조] (http://stackoverflow.com/a/17842796/201891) 및 [참조] (https://stackoverflow.com/questions/8772175/how-to-implement-container-managed-transaction-cmt). – DavidS

+1

5 개월 후, 이전 의견이 사실인지 확신 할 수 없습니다. 나는 그것을 결코 테스트하지 않았다. 나는 그것을 내가 읽은 것으로부터 추론했다. : - \ – DavidS

관련 문제