hibernate實(shí)現(xiàn)了《企業(yè)應(yīng)用架構(gòu)模式》第11章的許多模式,結(jié)合起來則更能理解hibernate的session的作用。只是雙方的一些術(shù)語未必能直接對(duì)應(yīng)上。
===========
Session接口
Session(會(huì)話)接口是Hibernate應(yīng)用使用的主要接口。會(huì)話接口的實(shí)例是輕量級(jí)的并且創(chuàng)建與銷毀的代價(jià)也不昂貴。這很重要因?yàn)槟愕膽?yīng)用可能始終在創(chuàng)建與銷毀會(huì)話,可能每一次請(qǐng)求都會(huì)如此。Hibernate會(huì)話并不是線程安全的因此應(yīng)該被設(shè)計(jì)為每次只能在一個(gè)線程中使用。
Hibernate會(huì)話是一個(gè)介于連接和事務(wù)之間的概念。你可以簡(jiǎn)單地認(rèn)為會(huì)話是對(duì)于一個(gè)單獨(dú)的工作單元已裝載對(duì)象的緩存或集合。Hibernate可以檢測(cè)到這個(gè)工作單元中對(duì)象的改變。我們有時(shí)也將會(huì)話稱為持續(xù)性管理器,因?yàn)樗彩桥c持續(xù)性有關(guān)的操作例如存儲(chǔ)和取出對(duì)象的接口。注意,Hibernate會(huì)話與Web層的HttpSession沒有任何關(guān)系。當(dāng)我們?cè)诒緯惺褂脮?huì)話時(shí),我們指的是Hibernate會(huì)話。為了區(qū)別,有時(shí)我們將HttpSession對(duì)象稱為用戶會(huì)話。
SessionFactory接口
應(yīng)用從SessionFactory(會(huì)話工廠)里獲得會(huì)話實(shí)例。與會(huì)話接口相比,這個(gè)對(duì)象不夠令人興奮。
會(huì)話工廠當(dāng)然不是輕量級(jí)的!它打算在多個(gè)應(yīng)用線程間進(jìn)行共享。典型地,整個(gè)應(yīng)用只有唯一的一個(gè)會(huì)話工廠——例如在應(yīng)用初始化時(shí)被創(chuàng)建。然而,如果你的應(yīng)用使用Hibernate訪問多個(gè)數(shù)據(jù)庫(kù),你需要對(duì)每一個(gè)數(shù)據(jù)庫(kù)使用一個(gè)會(huì)話工廠。
會(huì)話工廠緩存了生成的SQL語句和Hibernate在運(yùn)行時(shí)使用的映射元數(shù)據(jù)。它也保存了在一個(gè)工作單元中讀入的數(shù)據(jù)并且可能在以后的工作單元中被重用(只有類和集合映射指定了這種二級(jí)緩存是想要的時(shí)才會(huì)如此)。