怎么直接使用Hibernate

2023-06-20

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

《怎么直接使用Hibernate.doc》

下载本文的Word格式文档,以方便收藏与打印。