我正在使用以下代码
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的单个实例的单例类吗?这会有问题吗?
答案 0 :(得分:3)
您不需要tx.commit()来进行提取操作。这仅适用于任何保存,更新或删除。数据提取后关闭会话。
如果您的应用程序只连接到一个数据库,那么使用单个DAO会更好。 Spring框架鼓励这一点。您可以在以下链接中找到有关此内容的更多详细信息
答案 1 :(得分:1)
交易不应该是DAO的责任,那些确实需要在更高层次上进行控制。 DAO应该能够在不了解大局的情况下进行查询和更新,对DAO的调用可以分组在一个对象中,如Spring服务或EJB会话bean,它负责决定在事务中需要一起使用的内容。这使得DAO代码更具可重用性,因为它不必了解它运行的上下文。
看看Spring是如何做到的(在春季附带的petstore等示例应用程序中),或者更好,请看King / Bauer Hibernate-JPA一书,其中有一章介绍如何创建DAO。