设计一个hibernate dao

时间:2011-07-07 13:56:30

标签: java hibernate dao

我正在使用以下代码

 TestDAO {

    Session session = null;

    public TestDAO() {
        this.session = HibernateUtil.getSessionFactory().getCurrentSession();
    }

   //...more code create,update ...
  //each method starts a transcation using  "tx= session.beginTransaction();"

}

1)现在我应该使用tx.commit提交转移以进行提取操作,还是仅用于保存/更新操作?
2)我应该每次需要时创建一个单独的TestDAO实例吗?或者我应该创建一个返回DAO everytme的单个实例的单例类吗?这会有问题吗?

2 个答案:

答案 0 :(得分:3)

  1. 您不需要tx.commit()来进行提取操作。这仅适用于任何保存,更新或删除。数据提取后关闭会话。

  2. 如果您的应用程序只连接到一个数据库,那么使用单个DAO会更好。 Spring框架鼓励这一点。您可以在以下链接中找到有关此内容的更多详细信息

    Don't repeat the DAO!

答案 1 :(得分:1)

交易不应该是DAO的责任,那些确实需要在更高层次上进行控制。 DAO应该能够在不了解大局的情况下进行查询和更新,对DAO的调用可以分组在一个对象中,如Spring服务或EJB会话bean,它负责决定在事务中需要一起使用的内容。这使得DAO代码更具可重用性,因为它不必了解它运行的上下文。

看看Spring是如何做到的(在春季附带的petstore等示例应用程序中),或者更好,请看King / Bauer Hibernate-JPA一书,其中有一章介绍如何创建DAO。