您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“怎么直接使用Hibernate”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“怎么直接使用Hibernate”這篇文章吧。
在直接使用Hibernate時,要在事務結束的時候,寫上一句:tx.commit(),這個commit()的源碼為:
public void commit() throws HibernateException { if (!begun) { throw new TransactionException("Transaction not successfully started"); } log.debug("commit"); if (!transactionContext.isFlushModeNever() && callback) { transactionContext.managedFlush(); // if an exception occurs during // flush, user must call // rollback() } notifyLocalSynchsBeforeTransactionCompletion(); if (callback) { jdbcContext.beforeTransactionCompletion(this); } try { commitAndResetAutoCommit();//重點代碼,它的作用是提交事務,并把connection的autocommit屬性恢復為true log.debug("committed JDBC Connection"); committed = true; if (callback) { jdbcContext.afterTransactionCompletion(true, this); } notifyLocalSynchsAfterTransactionCompletion(Status.STATUS_COMMITTED); } catch (SQLException e) { log.error("JDBC commit failed", e); commitFailed = true; if (callback) { jdbcContext.afterTransactionCompletion(false, this); } notifyLocalSynchsAfterTransactionCompletion(Status.STATUS_UNKNOWN); throw new TransactionException("JDBC commit failed", e); } finally { closeIfRequired(); } }
上面代碼中,commitAndResetAutoCommit()方法的源碼如下:
private void commitAndResetAutoCommit() throws SQLException { try { jdbcContext.connection().commit(); //這段不用說也能理解了 } finally { toggleAutoCommit(); //這段的作用是恢復connection的autocommit屬性為true } }
上述代碼的toggleAutoCommit()源代碼如下:
private void toggleAutoCommit() { try { if (toggleAutoCommit) { log.debug("re-enabling autocommit"); jdbcContext.connection().setAutoCommit(true); //這行代碼的意義很明白了吧 } } catch (Exception sqle) { log.error("Could not toggle autocommit", sqle); } }
因此,如果你是直接使用Hibernate,并手動管理它的session,并手動開啟事務關閉事務的話,完全可以保證你的事務(好像完全是廢話)。
以上是“怎么直接使用Hibernate”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。