更新時間:2024年01月19日11時05分 來源:傳智教育 瀏覽次數(shù):
Session是Java應(yīng)用程序和Hibernate進行交互時所使用的主要接口,是持久化操作的核心API。它主要用于讀取、創(chuàng)建和刪除映射對象的實例,這一系列的操作將被轉(zhuǎn)換為數(shù)據(jù)表中的增加、修改、查詢和刪除操作。Session是輕量級的,實例的創(chuàng)建和銷毀不需要消耗太多的資源,同時它還是Hibernate的一級緩存,這個緩存主要用于存放當(dāng)前工作單元加載的對象。
獲取Session實例有兩種方式,一種是通過openSession()方法,另一種是通過getCurrentSession()方法。兩種方法獲取Session的代碼如下所示:
以上兩種獲取Session實例的主要區(qū)別是:采用openSession()方法獲取Session實例時,SessionFactory直接創(chuàng)建一個新的Session實例,并且在使用完成后需要調(diào)用close()方法進行手動關(guān)閉;而getCurrentSession()方法創(chuàng)建的Session實例會被綁定到當(dāng)前線程中,它在提交或回滾操作時會自動關(guān)閉。
在Session中,提供了多個持久化的操作方法,其常用方法如表23-8所示。
表23-8 Session中的常用方法
需要注意的是,Session是線程不安全的,當(dāng)多個并發(fā)線程同時操作一個Session實例時,就可能導(dǎo)致Session數(shù)據(jù)存取的混亂(當(dāng)方法內(nèi)部定義和使用Session時,不會出現(xiàn)線程問題)。因此設(shè)計軟件架構(gòu)時,應(yīng)避免多個線程共享一個Session實例。