我在Tomcat上對Spring使用Hibernate。我一直在閱讀並重新閱讀關於該主題的經文JBoss wiki page,這很有幫助。但它留下了一些問題。休眠在視圖中打開會話:每個請求的事務?
爲每個請求啓動事務的想法困擾我。我想我可以限制過濾器到某些控制器 - 也許把需要交易的所有控制器都置於僞「tx」路徑之下。但如果你不知道是否需要交易,使用交易不是一個壞主意嗎?如果我只是在讀取某些請求 - 很可能來自緩存的讀取 - 如果沒有事務處理,我是不是更好?
我讀過的文章提到他們如何處理服務層的事務,我想用Spring來做這件事。但是,過濾器代碼是什麼樣的?我仍然希望可以在我的視圖中使用會話進行一些延遲加載。
如果我所要做的只是在我的過濾器中調用
sessionFactory.getCurrentSession()
,它如何將「釋放」返回會話工廠以供再次使用? (即使在使用事務時,我期望看到一個session.close()
或其他東西)。誰在告訴會話工廠該會話可以重用?也許這是
beginTransaction()
呼叫,在請求期間將給定的數據庫連接綁定到給定的會話?否則,會話會根據需要從池中提取數據庫連接,對吧?
感謝您的耐心配合我的所有問題。 (如果你的答案將成爲Spring文檔的一個鏈接,那麼你只會讓我哭泣,你不想那樣,你呢?如果人們不再回答Spring,我會付出真金白銀)
我一直從這裏到那裏,然後到那裏,跳過關於這個主題的網絡一週...這是我第一次讀到Spring有一個OpenSessionInView過濾器。謝謝。 – Marvo
男人,只是工作得很漂亮。謝謝! – Marvo
我一直認爲它可以用作交易。但事實上這個交易受到了Spring的@Transactional的限制。感謝您的解釋。 –