//開啟事務 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 創建失敗"); } } }