相同的代码包装用于不同的dao方法

时间:2011-06-08 12:59:46

标签: java hibernate appfuse

我正在浏览hibernate教程并注意到在每个dao中你必须得到session,开始transaction.Perform所有操作然后提交

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()来包装dao操作的.commit();

通过使用这种技术,程序员不必担心hibernate事务的东西。我想要这样一种方式,即使重写了dao方法,事务包装器代码也应该自动出现。 我已经尝试将dao传递给装饰器类并在装饰器类中包装dao方法调用。但是因为dao接口方法会改变,所以这个想法很有用。我们究竟能够实现这一点。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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