![](/img/trans.png)
[英]difference between sessionfactory.openSession() and sessionfactory.openStatelessSession()?
[英]Difference between SessionFactory.openSession() & SessionFactory.getCurrentTransaction().commit()
如果我在方法結束時使用Session.getCurrentTransaction().commit()
關閉會話或使用session.close()
關閉會話會怎樣?
public static void deleteYear(Years year)
{
Session session = sessionFactory.openSession();
session.beginTransaction();
session.delete(year);
// what is the best way to close session
session.getTransaction().commit();
//or : session.close(); ???
}
ASAIK,這兩個是完全不同的操作。
sessionFactory.openSession()
:它打開一個會話
session.beginTransaction()
:它開始一個事務 ,事務是一個原子工作單元,應該完全成功或失敗。
session.getTransaction().commit()
:提交事務,這意味着在beginTransaction和此調用之間發生的所有事情都將持久化到數據庫中。 如果您不提交事務,則該事務中發生的所有更改都將丟失。 提交事務將無法關閉會話
session.close()
:關閉會話並釋放獲取的資源。
這意味着您需要同時調用commit()
和session.close()
。
public static void deleteYear(Years year)
{
Session session = sessionFactory.openSession();
session.beginTransaction();
session.delete(year);
session.getTransaction().commit();
session.close();
}
進行會話交易的更好方法
Session sess=getSession();
Transcration tx=sess.beginTranscration();
//do something with session
sess.save(obj);
tx.commit();
sess.close;
我建議這樣做 。
這完全是兩件事。
到目前為止, COMMIT
進行了transaction
內已進行的更改。
CLOSE
關閉會話,並且您不再有權訪問該會話。
所以你們可以在一起。
需要記住的注意事項 :無需關閉會話; 但是,會話應在最后DISCONNECT
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.