org.springframework.orm.hibernate3


org.springframework.orm.hibernate3.SessionFactoryUtils

 

Hibernate Session處理協助類,允許事務范圍內的Session重用。同樣提供了異常信息的轉義。

支持受Spring管理及不受Spring管理的JTA事務同步(例如簡單JTA或者EJB CMT),透明的支持事務范圍內的Hibernate Sessions。注意:對於不受Spring管理的JTA事務,必須在Hibernate的配置當中指定JTA的TransactionManagerLookup。

 

org.springframework.orm.hibernate3.SessionHolder

 

包裝了Hibernate Session及Hibernate事務的Session holder。在一個給定的Session工廠(SessionFactory)中的Hibernate事務管理對象( HibernateTransactionManager )綁定該類實例至當前線程。

 

org.springframework.orm.hibernate3.SpringSessionContext

 

Hibernate 3.1's CurrentSessionContext接口實現類,SessionFactoryUtils通過該類實例獲得spring管理下與當前線程綁定的Session。

Used by Spring's LocalSessionFactoryBean when told to expose a transaction-aware SessionFactory. This is the default as of Spring 2.5.

你可以自定義不同的CurrentSessionContext接口實現,並在設置SessionFactory工廠時,通過hibernate.current_session_context_class屬性指定您的CurrentSessionContext實現。

 

 

org.springframework.orm.hibernate3.LocalSessionFactoryBean

 

FactoryBean接口創建了Hibernate的Session工廠。這是在spring應用環境中安裝Hibernate Session工廠的常用方式(請參考FactoryBean接口);
通過依賴注入,這個Session工廠可以被傳遞到基於Hibernate支持的Dao中。

對於該類的配置及可以通過xml格式的Hibernate配置文件(通過制定“configLocation”屬性),也可以完全通過該類完成。一個典型的配置總是由
一個或者多個"mappingResources"屬性,"hibernateProperties" 屬性(不是絕對必須的), 和一個“dataSource”屬性(SessionFactory使用)完成。
“dataSource”屬性同樣可以由Hibernate的配置文件指定。但是這里的“dataSource”屬性(指當前類內部的)支持任何基於Spring配置的DataSource,
而不僅僅是Hibernate所依賴的數據庫連接提供者。

從單個數據庫應用到分布式事務,SessionFactory的處理策略適用於大多數的應用。Hibernate事務管理對象或者JTA事務管理對象可用於不同的
場合,JTA事務管理對象僅用於多個數據庫的事務處理。

默認情況下這個工廠對象將會派生出一個事務感知(transaction-aware)的SessionFactory型代理對象。無論使用任何事物管理策略
(local/JTA/EJB CMT)或者任何事物同步機制(Sping/JTA),Spring均可以使數據在使用原生Hibernate Session工廠,getCurrentSession()方法
的同時仍舊可以參與Spring管理的當前事務過程(ThreadLocal)。此外,getCurrentSession()方法對請求范圍內的Session對象(由OpenSessionInViewFilter / OpenSessionInViewInterceptor管理的)提供了完美支持。

 

org.springframework.orm.hibernate3.HibernateTransactionManager 

HibernateTransactionManager是一個為Hibernate Session工廠提供服務的PlatformTransactionManager接口實現。
HibernateTransactionManager和一個綁定在當前線程上的Hibenrate Session對象進行捆綁。SessionFactoryUtils對
象和HibernateTemplate對象可以感知當前線程內的Session對象,並自動參與當前線程內的事務處理。Using either 
of those or going through SessionFactory.getCurrentSession() is required for Hibernate access code that needs
to support this transaction handling mechanism. 


支持自定義的隔離級別,及Hibernate事務超時設定。

這個事務管理對象很適合於那種使用單Hibernate Session工廠的事務型數據訪問應用,但是它也同樣支持在一個事務中
直接的數據源訪問(例如相同數據源的JDBC代碼訪問)。這樣就允許混合型的應用代碼,例如使用Hibernate訪問,使用
JDBC訪問(並不知道同時使用了Hibernate)!Application code needs to stick to the same simple Connection lookup 
pattern as with DataSourceTransactionManager  (i.e. DataSourceUtils.getConnection(javax.sql.DataSource)  or going 
through a TransactionAwareDataSourceProxy). 

 

....................

 

org.springframework.orm.hibernate3.HibernateAccessor 

HibernateTemplate和HibernateInterceptor父類,定義了像SessionFactory,flushing行為等通用屬性。

不要嘗試直接使用該類。請參考HibernateTemplate和HibernateInterceptor.

 

org.springframework.orm.hibernate3.HibernateInterceptor 

這個攔截器在進入方法調用之前為當前線程綁定一個新的Hibernate Session實例,在方法執行完畢之后關閉並移除。
如果當前線程內已存在Session實例(來自HibernateTransactionManager對象或者已被Hibernate攔截器攔截的方法
環境),這個攔截器將會使用已有的Session實例。

應用代碼必須通過SessionFactoryUtils.getSession方法或者更好的方式——Hibernate自己的SessionFactory.getCurrentSession()
方法獲得與當前線程綁定的Session對象。通常情況下,代碼如下所示:

Java代碼   復制代碼
  1. public void doSomeDataAccessAction() {   
  2.   Session session = this.sessionFactory.getCurrentSession();   
  3.   ...   
  4.   // No need to close the Session or translate exceptions!   
  5. }  
Java代碼   復制代碼
  1. public void doSomeDataAccessAction() {   
  2.   Session session = this.sessionFactory.getCurrentSession();   
  3.   ...   
  4.   // No need to close the Session or translate exceptions!   
  5. }  
[java]   view plain copy
 
  1. public void doSomeDataAccessAction() {  
  2.   Session session = this.sessionFactory.getCurrentSession();  
  3.   ...  
  4.   // No need to close the Session or translate exceptions!  
  5. }  

 

注意:通過委托的SessionFactoryUtils.convertHibernateAccessException方法,攔截器將會自動的將Hibernate異常
轉換成與org.springframework.dao異常體系兼容的異常(像HibernateTemplate那樣)。如果想要獲取原始異常,可
以關閉這個功能。

這個類可以認為是HibernateTemplate回調方法的一個替代方案。優點是:
    1)回調方法不需要使用匿名類。
    2)在數據訪問的應用代碼中可以拋出任何應用異常。
缺點是依賴額外的攔截配置。然而,需要注意的是,通常情況下,在一個事務內部執行的數據訪問代碼不需要配置該
攔截器。在事務開始的起點將會有一個與線程綁定的Session實例,所以增加這個攔截器僅僅是在需要對Session實例
的屬性微調例如flush模式 - 或者需要異常轉義的時候。

 

org.springframework.orm.hibernate3.HibernateTemplate


簡化Hibernate數據訪問代碼的輔助類。自動轉換Hibernate原生異常為符合org.springframework.dao異常體系的DataAccessExceptions異常。

最重要execute方法支持實現了HibernateCallback接口的Hibernate訪問代碼。無論是HibernateCallback接口實現或
者其他的調用代碼,無需關心對Session對象的獲取和關閉以及Session對象的生命期異常。對典型的單步驟調用,提
供了多種便利方法(find, load, saveOrUpdate, delete)。

在一個service實現中可以通過一個SessionFactory引用直接獲得該實例,或者在一個應用的上下文環境中獲得一個配
置好的實例作為該service的內部引用。注意:SessionFactory應當永遠以bean的形式被配置在應用的上下文當中,第
一種情況下直接提供給service實現,第二種情況提供模板實例引用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM