12.2.5. Implementing DAOs based on plain Hibernate3 API
Spring/Chapter 12 : 2007. 4. 25. 12:25
Hibernate 3.0.1 에서는 "Contexture Sessions"라고 부르는, 트랜잭션 당 하나의 current 세션을 사용하는 방법이 있습니다.
위의 소스코드는 다음과 같은 DI가 필요합니다.
단점은 HibernateException을 발생시키는데 이 것으로는 optimistic locking 이 실패 했다거나 하는 것을 알려주지 못합니다.
결론은 DAO를 구현할 때 Spring을 사용하여(HibernateTransactionManager) 트랜잭션 관리도 하고 DataAccessException을 사용할 수도 있지만 Hibernate3 API만 사용하여 구현할 수도 있습니다.
Spring 에서도 위와 같은 방법으로 코딩을 하면 트랜잭션 당 하나의 Hibernate Session객체를 사용하여 작업을 합니다.public class ProductDaoImpl implements ProductDao {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Collection loadProductsByCategory(String category) {
return this.sessionFactory.getCurrentSession()
.createQuery("from test.Product product where product.category=?")
.setParameter(0, category)
.list();
}
}
위의 소스코드는 다음과 같은 DI가 필요합니다.
이런 스타일의 코딩의 장점은 Spring API에 종속 되지 않는 다는 것입니다. 오직 Hibernate API만 사용하고 있습니다.<beans>
<bean id="myProductDao" class="product.ProductDaoImpl">
<property name="sessionFactory" ref="mySessionFactory"/>
</bean>
</beans>
단점은 HibernateException을 발생시키는데 이 것으로는 optimistic locking 이 실패 했다거나 하는 것을 알려주지 못합니다.
결론은 DAO를 구현할 때 Spring을 사용하여(HibernateTransactionManager) 트랜잭션 관리도 하고 DataAccessException을 사용할 수도 있지만 Hibernate3 API만 사용하여 구현할 수도 있습니다.
'Spring > Chapter 12' 카테고리의 다른 글
하이버네이트, 스프링, 트랜잭션, OSIV(Open Session In View) 패턴 (0) | 2008.11.17 |
---|---|
@Repository를 쓴다면 하이버네이트 예외 변환기 직접 만들 필요 없습니다. (4) | 2008.11.12 |
12.2.8. Transaction management strategies (0) | 2007.04.27 |
12.2.7. Declarative transaction demarcation (0) | 2007.04.25 |
12.2.6. Programmatic transaction demarcation (0) | 2007.04.25 |
12.2.5. Implementing DAOs based on plain Hibernate3 API (2) | 2007.04.25 |
레퍼런스 12장에 오타 (0) | 2007.04.24 |
12.2.4. Implementing Spring-based DAOs without callbacks (2) | 2007.04.24 |
12.2.3. The HibernateTemplate (16) | 2007.04.23 |
12.2.2. SessionFactory setup in a Spring container (0) | 2007.04.23 |
12.2.1. Resource management (0) | 2007.04.23 |
하이버네이트 versioning을 사용하면 하이버네이트만 사용해도 Optimistic control이 가능해요~
3.01에는 JTA 기반으로 생긴거구요, 3.1에 가면서 ThreadLocal 기반도 추가되었답니다~
ㅇㅇ트랙백 쌩큐. Session per Request, Session per Transaction, Contexture Session 요거 다 같은 말인가 보군.