[英]Same Code wrapping for different dao methods
我正在閱讀 hibernate 教程,並注意到在每個 dao 中你必須得到 session,開始事務。執行所有操作,然后提交
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 操作的。
通過使用這種技術,程序員不必擔心 hibernate 事務的東西。我希望它以這樣一種方式實現,即使 dao 方法被覆蓋,事務包裝器代碼也應該自動出現。 我已經嘗試將 dao 傳遞給裝飾器 class 並將 dao 方法調用包裝在裝飾器 class 中。但是由於 dao 接口方法會改變,所以這個想法很有效。我們如何才能實現這一點。
我不知道 AppFuse 是如何做到的,但是將事務管理引入應用程序的服務層的一種非常常見的方法是使用面向方面的編程。 如果您使用的是 Spring 框架,這(來自手冊)是一個很好的參考。
HibernateTemplate
是 Spring 的一部分。 您可以在此鏈接上閱讀更多相關信息。 但是從 Spring 3.0 開始,它被認為已被棄用,有利於聲明式事務管理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.