Hibernate中session的flush方法和commit()方法區別

參考地址:http://blog.csdn.net/cmtobby/article/details/1750632

保存:

session=HibernateSessionFactory.getSession();
			session.beginTransaction();
			session.save(jc);

①執行save()方法,不執行session.flush()方法,或者commit()方法:只有選取出主鍵Id字段

Hibernate: select hibernate_sequence.nextval from dual
</pre><span style="color:#ff0000">②</span>執行save(),並且<span style="color:#ff0000">執行flush()方法</span>:向緩存提交插入語句<p></p><p></p><pre name="code" class="java">session=HibernateSessionFactory.getSession();
			session.beginTransaction();
			session.save(jc);
			session.flush();

所以有提交,不執行

Hibernate: select hibernate_sequence.nextval from dual
Hibernate: insert into SXBBKF.J_CARS (NAME, TIME, ID) values (?, ?, ?)

執行save()方法並commit()

	session=HibernateSessionFactory.getSession();
			session.beginTransaction();
			session.save(jc);
			session.getTransaction().commit();

提交了插入sql語句,並執行了更新

Hibernate: select hibernate_sequence.nextval from dual
Hibernate: insert into SXBBKF.J_CARS (NAME, TIME, ID) values (?, ?, ?)


附:關於beginSession問題

一、在save()方法中:

session=HibernateSessionFactory.getSession();
			session.beginTransaction();
			session.save(jc);
			session.getTransaction().commit();
開啓事務,並進行事務提交


二、在delete()方法中:

session=HibernateSessionFactory.getSession();
			//session.beginTransaction();
			JCars jc=(JCars)session.get(JCars.class, new Integer("104"));  //get、load之後,就編程了持久化狀態
			session.delete(jc);
			session.getTransaction().commit();
不beginSeesion,僅通過Get方法來加載

<span style="color:#ff0000;">Transaction not successfully started</span>
並無法正常提交,會報錯

開始transaction後,執行刪除操作成功!


三、在modify()方法中:

session=HibernateSessionFactory.getSession();
			JCars jc=(JCars)session.get(JCars.class, new Integer("111"));
			jc.setName("byd2");
			session.getTransaction().commit();
同樣出錯:

<span style="color:#ff0000;">Transaction not successfully started</span>

同樣需要begginSession()

開啓後,成功修改










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章