自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談如何直接使用Hibernate

開發(fā) 后端
這里介紹如果你是直接使用Hibernate,并手動管理它的session,并手動開啟事務(wù)關(guān)閉事務(wù)的話,完全可以保證你的事務(wù)。

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

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

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

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

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

上述代碼的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. }  

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

【編輯推薦】

  1. Hibernate專業(yè)知識介紹
  2. 討論Hibernate和模型對象
  3. Hibernate查詢緩存全面分析
  4. 概括Hibernate主鍵生成機制
  5. Hibernate Pager基礎(chǔ)介紹
責(zé)任編輯:佚名 來源: blogjava
相關(guān)推薦

2009-09-28 13:43:28

使用Hibernate

2009-06-10 09:58:32

Oracle sequHibernate

2009-09-21 13:05:18

Hibernate u

2009-09-23 17:07:31

Hibernate C

2009-09-28 15:47:59

Hibernate O

2009-09-25 10:53:40

Hibernate S

2009-09-22 10:09:21

Hibernate S

2009-09-29 10:46:58

Hibernate領(lǐng)域

2009-06-05 09:52:25

struts分頁Hibernate

2009-09-28 13:39:01

Hibernate工作

2009-09-27 10:02:29

定制Hibernate

2009-07-23 13:30:46

JDBC事務(wù)

2009-09-29 16:16:58

Hibernate H

2012-02-08 11:01:53

HibernateJava

2009-09-21 17:17:11

Hibernate二級

2009-09-29 15:52:26

Hibernate X

2009-09-27 14:06:57

Hibernate o

2011-08-10 09:31:41

Hibernateunion

2009-09-23 14:40:17

Hibernate F

2009-02-11 09:37:32

Hibernate分頁技術(shù)JSP
點贊
收藏

51CTO技術(shù)棧公眾號