0

我正在阅读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 接口方法会发生变化,所以这个想法起作用了。我们究竟如何实现这一点。

4

2 回答 2

1

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

于 2011-06-08T13:03:09.400 回答
1

HibernateTemplate是春天的一部分。您可以在此链接上阅读更多相关信息。但从 Spring 3.0 开始,它被认为已被弃用,取而代之的是声明式事务管理

于 2011-06-08T13:03:43.733 回答