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