【问题标题】:Service methods without using hibernate template不使用休眠模板的服务方法
【发布时间】:2012-04-25 22:17:14
【问题描述】:

我已经在谷歌上搜索了几个小时,试图找到一个示例,说明如何在使用 DAO 接口时编写一个不使用 Springs Hibernate 模板的服务方法。让我感到困惑的是,当我将 @Transactional 注释放在服务层而不是 DAO 中时会发生什么。 Service 方法/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

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    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;
    
        ...
    }
    

    【讨论】:

    • 谢谢,这帮了我很大的忙,但我仍然对服务方法和 DAO 目的之间的区别有点困惑。你有没有机会给我(或指出我的方向)一个他们如何相互作用的例子?
    • 阅读这个答案和后面的 cmets:stackoverflow.com/questions/8754840/…
    • 这正是我正在寻找的信息!谢谢你。关于你所说的关于调用多个 DAO 的服务层,我有一个后续问题。我会为我希望执行的每个任务编写一个单独的 DAO 吗?另外我想知道一点题外话,创建一个 Dao 然后一个 DaoImplementation 有什么用?谢谢!
    • 就像其他所有类一样,您将在一个 DAO 中将逻辑上组合在一起的方法分组。例如,您可以将与给定实体或一组实体相关的所有方法分组到单个 DAO 中。接口主要用于单元测试,以便能够模拟 DAO 并测试依赖它的服务。
    猜你喜欢
    • 2011-09-25
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2013-05-05
    • 2018-11-20
    • 1970-01-01
    相关资源
    最近更新 更多