[英]hibernate Open Session in View
我正在使用以下方法來解決hibernate中唯一的延遲初始化問題。請告訴我它是否可以工作。 由於某些原因,我必須在我的持久層中強制執行事務處理。
public class CourseDAO {
Session session = null;
public CourseDAO()
{
this.session = this.session = HibernateUtil.getSessionFactory().getCurrentSession();
}
public Course findByID(int cid){
Course crc = null;
Transaction tx = null;
try {
tx = session.beginTransaction();
Query q = session.createQuery("from Course as course where course.cid = "+cid+" ");
crc = (Course) q.uniqueResult();
//note that i am not commiting my transcation here.Because If i do that i will not be able to
//do lazy fetch
}
catch (HibernateException e)
{
e.printStackTrace();
tx.rollback();
throw new DataAccessLayerException(e);
}
finally
{
}
return crc;
}
}
在過濾器中,我正在使用以下代碼
session = HibernateUtil.getSessionFactory().getCurrentSession();
if(session.isOpen())
HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().commit();
這種方法正確嗎? 可以有什么問題嗎
您能解釋一下為什么您需要在您的存儲庫中進行交易嗎? 問題在於它們的粒度是如此之細,因此您不會從會話緩存中獲得任何好處
那么您要在那里打開交易,但要在過濾器中關閉交易。 如果您訪問服務中的多個存儲庫,會發生什么? 也許我不明白您的意思,但我認為您需要重新考慮迫使您在存儲庫中管理交易的原因
何時創建CourseDAO? 如果它是單例bean或比頁面視圖更長壽的其他東西,則需要保留SessionFactory並在需要時生成一個新Session,而不是保留Session。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.