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