av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

淺談如何直接使用Hibernate

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

為鉛山等地區(qū)用戶提供了全套網(wǎng)頁設(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í)候,寫上一句: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. //這段不用說也能理解了
  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)開啟事務(wù)關(guān)閉事務(wù)的話,完全可以保證你的事務(wù)(好像完全是廢話)。


網(wǎng)站標(biāo)題:淺談如何直接使用Hibernate
轉(zhuǎn)載來于:http://uogjgqi.cn/article/coijhgj.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流