我一直在谷歌搜索几个小时,现在试图找到一个如何在使用DAO接口时编写一个不使用Springs Hibernate Template 的服务方法的示例。当我把 @Transactional 注释放在服务层而不是DAO时,会发生什么让我感到困惑的事情。 服务方法/ DAO接口是否可以互换?
Here is an example where the @Transactional is in the DAO
Here is one with the @Transactional in the Service Layer but using hibernate templates
感谢您的帮助!
答案 0 :(得分:2)
Spring documentation建议完全避免使用HibernateTemplate,而是直接使用Hibernate API:
注意:从Hibernate 3.0.1开始,事务性Hibernate访问代码可以 也可以用简单的Hibernate风格编码。因此,对于新开始 项目,考虑采用标准的Hibernate3编码风格 数据访问对象,而不是基于 SessionFactory.getCurrentSession()。
@Transactional
注释应始终放在服务层的方法上。这是划分事务的层。
阅读http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#orm-session-factory-setup以了解如何设置会话工厂。完成后,可以在DAO中注入会话工厂:
@Repository
public class MyDAO {
@Autowired
private SessionFactory sessionFactory;
...
}