日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
淺談如何直接使用Hibernate

學(xué)習(xí)Hibernate時(shí),經(jīng)常會(huì)遇到直接使用Hibernate問(wèn)題,這里將介紹直接使用Hibernate問(wèn)題的解決方法。

為鉛山等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及鉛山網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、網(wǎng)站建設(shè)、鉛山網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

在直接使用Hibernate時(shí),要在事務(wù)結(jié)束的時(shí)候,寫(xiě)上一句:tx.commit(),這個(gè)commit()的源碼為:

 
 
 
  1. public void commit() throws HibernateException {
  2. if (!begun) {
  3. throw new TransactionException("Transaction not successfully started");
  4. }
  5. log.debug("commit");
  6. if (!transactionContext.isFlushModeNever() && callback) {
  7. transactionContext.managedFlush(); // if an exception occurs during
  8. // flush, user must call
  9. // rollback()
  10. }
  11. notifyLocalSynchsBeforeTransactionCompletion();
  12. if (callback) {
  13. jdbcContext.beforeTransactionCompletion(this);
  14. }
  15. try {
  16. commitAndResetAutoCommit();
  17. //重點(diǎn)代碼,它的作用是提交事務(wù),并把connection的autocommit屬性恢復(fù)為true
  18. log.debug("committed JDBC Connection");
  19. committed = true;
  20. if (callback) {
  21. jdbcContext.afterTransactionCompletion(true, this);
  22. }
  23. notifyLocalSynchsAfterTransactionCompletion(Status.STATUS_COMMITTED);
  24. } catch (SQLException e) {
  25. log.error("JDBC commit failed", e);
  26. commitFailed = true;
  27. if (callback) {
  28. jdbcContext.afterTransactionCompletion(false, this);
  29. }
  30. notifyLocalSynchsAfterTransactionCompletion(Status.STATUS_UNKNOWN);
  31. throw new TransactionException("JDBC commit failed", e);
  32. } finally {
  33. closeIfRequired();
  34. }
  35. }

上面代碼中,commitAndResetAutoCommit()方法的源碼如下:

 
 
 
  1. private void commitAndResetAutoCommit() throws SQLException {
  2. try {
  3. jdbcContext.connection().commit();
  4. //這段不用說(shuō)也能理解了
  5. } finally {
  6. toggleAutoCommit();
  7. //這段的作用是恢復(fù)connection的autocommit屬性為true
  8. }
  9. }

上述代碼的toggleAutoCommit()源代碼如下:

 
 
 
  1. private void toggleAutoCommit() {
  2. try {
  3. if (toggleAutoCommit) {
  4. log.debug("re-enabling autocommit");
  5. jdbcContext.connection().setAutoCommit(true);
  6. //這行代碼的意義很明白了吧
  7. }
  8. } catch (Exception sqle) {
  9. log.error("Could not toggle autocommit", sqle);
  10. }
  11. }

因此,如果你是直接使用Hibernate,并手動(dòng)管理它的session,并手動(dòng)開(kāi)啟事務(wù)關(guān)閉事務(wù)的話,完全可以保證你的事務(wù)(好像完全是廢話)。


網(wǎng)站標(biāo)題:淺談如何直接使用Hibernate
本文來(lái)源:http://www.5511xx.com/article/coijhgj.html