这篇文章主要为大家展示了“怎么直接使用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”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!