getSession()和getCurrentSession()的區別及常見問題
2.採用getCurrentSession()建立的session在commit或rollback時會自動關閉,而採用openSession()建立的session必須手動關閉
3.使用getCurrentSession時,需要在配置檔案中新增如下:
(1)如果使用的是本地事務(JDBC事務)
<property name="current_session_context_class">thread</property>
(2)如果使用的是全域性事務(JTA事務)(hibernate3.0裡只能和jta繫結)
<property name="current_session_context_class">jta</property>
4.常見問題:
spring管理事務的話,如果要保證當前執行緒內只有一個session,需要將sessionFactory傳遞給org.springframework.orm.hibernate3.HibernateTransactionMana
總結
4.1如果想讓spring幫你管理事務,只能在spring中配置SessionFactory。如果使用hibernate原有的sessionFactory,則只能自己手動管理事務。
4.2如果想使用sessionFactory.getCurrentSession()方法,必須配置sessionFactory和jta或thread繫結。但是hibernate3.
4.3sessionFactory.getCurrentSession()方法取得的session,在做資料庫操作時必須在事務中做,包括只讀的查詢,否則會報錯。