Hibernate核心API

1. SessionFactory

最開始的時候必須要先創建一個SessionFactory,這個就有點像一個數據庫連接池一樣,它是根據configuration文件來創建的,而它存在目的就是創建session。

2. Session

Session纔是真正拿數據的通道,獲取這個通道的方式有2個。

如果你調用openSession(),那麼每次都會創建一個新的session,用完以後你必須調用session.close(),關掉session,下次調用的時候又會再創建一個。

而如果你使用getCurrentSession,那麼如果沒有就創建,已經有打開的,就直接使用那一個,不會創建新的。

注意一點,那就是無論哪種方式,一旦你commit了,那麼下次調用都會創建新的。

爲什麼要區分呢?

需要說明一個關於" 事務"的問題。有時候你需要進行一連串的操作才叫一個事務的完成,比如你想存一個東西到一個表,再存一個log到日誌表記錄該操作,那麼在這些操作全部完成之前,並不能提交。要不然你要是存了東西但是沒有存日誌就不行,或者你日誌都存了,但其實根本沒存數據,那麼就要出錯。所以最好的方式就是使用getCurrentSession,這樣將2個操作都在這一個session上面,全部完成再提交,就能保證一致。

3. 那HIbernate是怎麼去管理創建Session之類的呢?在hibernate.cfg.xml文件裏面有一個current-session_context的配置,默認設置爲thread,這樣就會自動被管理,先去當前connection找,如果沒有就創建,有就調用。還有一種是JTA。

4.JTA

假如你要做的操作依賴於多個數據庫,而不是一個,就是所謂的分佈式數據庫,那麼原來的只是針對一個數據的Connection就無法滿足條件了。這個時候就需要有一個TransactionManager,由它來進行預處理,然後再將其弄成一個事務進行操作。

這個TransactionManager是由Application Server提供的支持,Tomcat不行,必須藉助Spring,而JBoss和WebLogic可以。JTA就相當於有了TransactionManager之後的操作。

但是其實這種用法很少。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章