浅谈如何直接使用Hibernate

学习Hibernate时,经常会遇到直接使用Hibernate问题,这里将介绍直接使用Hibernate问题的解决方法。

为铅山等地区用户提供了全套网页设计制作服务,及铅山网站建设行业解决方案。主营业务为成都网站制作、网站建设、铅山网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

在直接使用Hibernate时,要在事务结束的时候,写上一句:tx.commit(),这个commit()的源码为:

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

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

 
 
 
  1. private void commitAndResetAutoCommit() throws SQLException {
  2. try {
  3. jdbcContext.connection().commit();
  4. //这段不用说也能理解了
  5. } finally {
  6. toggleAutoCommit();
  7. //这段的作用是恢复connection的autocommit属性为true
  8. }
  9. }

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

因此,如果你是直接使用Hibernate,并手动管理它的session,并手动开启事务关闭事务的话,完全可以保证你的事务(好像完全是废话)。

网页名称:浅谈如何直接使用Hibernate
文章来源:http://www.hantingmc.com/qtweb/news41/528241.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联