【问题标题】:Same Code wrapping for different dao methods不同 dao 方法的相同代码包装
【发布时间】:2011-09-10 20:48:10
【问题描述】:

我正在阅读hibernate教程并注意到在每个dao中你必须获取会话,开始事务。执行所有操作然后提交

private void createAndStoreEvent(String title, Date theDate) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();

        //Perform operations...

        session.getTransaction().commit();
    } 

然后我注意到在一个名为 Appfuse 的框架中使用 hibernate 有如下所示的 dao 方法。我没有看到 begintransaction 和 commit

    public List<Person> findByLastName(String lastName) {
    //begintransaction
        return getHibernateTemplate().find("from Person where lastName=?", lastName);
    //Commit
    }

我想知道 appfuse 是如何用 session.beginTransaction() 和 session.getTransaction().commit() 来封装 dao 操作的;

通过使用这种技术,程序员不必担心休眠事务的东西。我希望它以这样一种方式实现,即使 dao 方法被覆盖,事务包装器代码也应该自动出现。 我曾尝试将 dao 传递给装饰器类,并将 dao 方法调用包装在装饰器类中。但是由于 dao 接口方法会发生变化,所以这个想法起作用了。我们究竟如何实现这一点。

【问题讨论】:

    标签: java hibernate appfuse


    【解决方案1】:

    我不知道 AppFuse 是如何做到的,但是将事务管理引入应用程序的服务层的一种非常常见的方法是使用面向方面的编程。如果您使用的是 Spring 框架,this(来自手册)是一个很好的参考。

    【讨论】:

      【解决方案2】:

      HibernateTemplate 是 Spring 的一部分。您可以在此链接上阅读更多相关信息。但从 Spring 3.0 开始,它被认为已弃用,取而代之的是 declarative transaction management

      【讨论】:

        猜你喜欢
        • 2017-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多