데이터 액세스 - DAO와 트랜잭션 관리를 만들기
전항의 예제를 참조, 우리는 엔티티 자동차로 DAO를 만드는 방법을 참조하십시오.
즉, DAO를 기반 방법은 모든 creaimo 우선 인터페이스 :로드, 업데이 트하고, 삭제, 저장합니다.
it.mrwebmaster.hibernate.dao 패키지;
it.mrwebmaster.hibernate.Car 수입;
CarDao {공용 인터페이스
공용 차량 하중 (정수 ID);
공용 차량 (자동차 자동차)를 저장;
공용 차량 (자동차 자동차)를 업데이 트;
공공 무효 제거 (자동차 카);
}
우리가 구현의 창조에 전달 인터페이스를 만든 :
it.mrwebmaster.hibernate.dao 패키지;
it.mrwebmaster.hibernate.Car 수입;
javax.persistence.EntityManager 수입;
javax.persistence.PersistenceContext 수입;
org.springframework.transaction.annotation.Transactional 수입;
@ 트랜잭션
CarDaoImpl {공용 클래스는 CarDao을 구현
@ PersistenceContext (unitName = "PU")
개인 EntityManager 놈들;
@ 무시
공공 무효 제거 (자동차 카) {
em.remove (자동차);
}
@ 무시
@ 트랜잭션 (읽기 전용 = 진정한)
공용 차량 하중 (정수 ID) {
em.find (Car.class, ID)를 반환;
}
@ 무시
공용 차량 (자동차 자동차) {저장
(자동차) em.persist;
자동차를 반환;
}
@ 무시
업데이트 공개 차량 (자동차 카) {
em.merge 리턴 (문자);
}
공공 무효 SETEM (EntityManager 놈들) {
this.em = 놈들;
}
getEm 공개 EntityManager () {
m을 반환;
}
}
그리고 마지막으로 'applicationContext.xml에서 :
<-! 차 DAO -> <bean id="carDaoImpl" class="it.mrwebmaster.hibernate.dao.CarDaoImpl" />
nosto DAO를 구현하는 볼 수 있듯이 우리는 주석 @ PersistenceContext의 사용을 통해 'IOC에서 직접가 주입되는 EntityManager를해야합니다.
(기사는 아래에 계속됩니다 ...)
구현의 개별적인 방법이 놀랍도록 정교하고 있으며, 단순히 작업 all'EntityManager을 위임합니다.
트랜잭션 관리에 관해서는 @ 트랜잭션 주석을 사용하도록 선택했습니다.
이 봄 우리의 DAO가 누구의 업무의 경우에는 커밋 또는 롤백하여 동일한 방법으로 '출력 방법과 즉시 호출하기 전에 거래를 열고 닫습니다 프록시를 사용의 인스턴스를 만들 수 있습니다 실수.
참고 결국로드 방식에 대한 @ 트랜잭션 읽기 전용 nell'annotation의 사용, 그럼으로써의 읽기 전용의 변화를 만들었습니다.
이 트랜잭션 관리는 그것이 우리 applicazionContext.xml에 추가할 수 있도록하기 위해 AOP를 사용하여 수행됩니다 :
<-! 경영 거래 -> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </ 빈> <tx:annotation-driven transaction-manager="transactionManager" />






