//開啟事務 transaction=session.beginTransaction();
上面為開啟事務
transaction.commit();這個為提交事務
從session物件中獲取事務後進行提交
下面可以自動提交事務,並且可以不需要對於這個事務進行提交,但是不推薦這樣進行使用這個方法
session.doWork(new Work() { //這裡的connection物件就是jdbc中的物件 @Override public void execute(Connection connection) throws SQLException { // TODO Auto-generated method stub connection.setAutoCommit(true);//設定自動提交事務 } });
在設定自動提交事務後必須對session進行重新整理操作後才能有效
session.flush();//對於事務設成自動提交後需要對session進行重新整理後才能使用
openSession 每次使用都是開啟一個新的session,使用完需要呼叫close方法關閉session;如果不關閉會導致每次都開啟一個connection物件,最後導致連線池溢位
getCurrentSession 是獲取當前session物件,連續使用多次時,得到的session都是同一個物件,這就是與openSession的區別之一 ;
一般在實際開發中,往往使用getCurrentSession多,因為一般是處理同一個事務,所以在一般情況下比較少使用openSession;
如何獲得session物件???
(1)openSessionion
(2)getCurrentSession
如果使用getCurrentSession需要在hibernate.cfg.xml檔案中進行配置:
如果是本地事務(jdbc事務)
<property name="hibernate.current_session_context_class">thread</property>
如果是全域性事務(jta事務)
<property name="hibernate.current_session_context_class">jta</property>
package cn.lonecloud.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import org.junit.Test; public class SessionTest { @Test public void TestOpenSession() { Configuration configuration = new Configuration().configure();// 獲得配置檔案物件 ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()) .buildServiceRegistry();//獲得服務註冊物件 SessionFactory factory=configuration.buildSessionFactory(registry);//獲得session工廠物件 Session session=factory.openSession();//獲取session物件 if (session!=null) { System.out.println("Session 建立成功"); }else { System.out.println("Session 建立失敗"); } } //在使用getCurrentSession的時候必須在cfg配置檔案中進行配置 // <!--設定當前的session物件的型別thead為當前的jdbc的session物件 --> // <!-- 如果是本地事務(jdbc事務) --> // <property name="hibernate.current_session_context_class">thread</property> //<!-- 如果是全域性事務(jta事務) // <property name="hibernate.current_session_context_class">jta</property> --> @Test public void TestCurrentSession(){ Configuration configuration = new Configuration().configure();// 獲得配置檔案物件 ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()) .buildServiceRegistry();//獲得服務註冊物件 SessionFactory factory=configuration.buildSessionFactory(registry);//獲得session工廠物件 Session session=factory.getCurrentSession();//獲取session物件 if (session!=null) { System.out.println("Session 建立成功"); }else { System.out.println("Session 建立失敗"); } } }