open session in view引起的事務問題

power1128發表於2008-05-05
最近在做專案的時候用到了hibernate,由於lazyload的問題,接觸到了open session in view這種解決方案,但是實踐下來的效果卻讓我對這個方法產生了懷疑.
就拿session-per-request來舉例,也就是從request到response之間一直開啟session.按照官方教程,我們肯定需要一個filter或者interceptor,完成開啟和關閉session的任務.其它所有的方法都使用getCurrentSession來獲得當前的持久context.現在如果我們在表現層(例如Struts的Action)修改了一個物件,然後呼叫相應的service更新它.此時service丟擲了業務異常,需要我們取消之前的更新,這時如果不再Action中編寫事務控制的程式碼,剛才的更改是無法rollback的(因為此時所有物件都是persistent狀態,一旦更改後需要事務程式碼來回滾,而不像detached物件)
大家在這裡是怎麼解決的呢?我覺得這樣反而需要在表現層引入事務控制語句,反而把事情搞複雜了

[該貼被power1128於2008-05-05 16:08修改過]

相關文章