不使用hibernate模板的服务方法

时间:2012-04-13 14:28:10

标签: java spring hibernate dao hibernate-generic-dao

我一直在谷歌搜索几个小时,现在试图找到一个如何在使用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

感谢您的帮助!

1 个答案:

答案 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;

    ...
}