新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
淺談如何直接使用Hibernate
學習Hibernate時,經(jīng)常會遇到直接使用Hibernate問題,這里將介紹直接使用Hibernate問題的解決方法。

為鉛山等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及鉛山網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站制作、網(wǎng)站建設、鉛山網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
在直接使用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
文章分享:http://m.fisionsoft.com.cn/article/coijhgj.html


咨詢
建站咨詢
