快速业务通道

Spring坿旗鷹盾裂?伊??Spring駁強Hibernate議糞? - 園殻秘壇利

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
d by synchronization at transaction completion.      // 把新打开的Session放到SessionHolder,然后放到ThreadLocal里面去和线 程绑定起来,这个ThreadLocal是在 TransactionSynchronizationManager中配置好的, 可以根据sessionFactory来索取      // 同时根据事务处理的状态来配置session的属性,比如把FlushMode设置为 Never,同时把session和事务处理关联起来      if (TransactionSynchronizationManager.isSynchronizationActive()) {        // We''re within a Spring-managed transaction, possibly from JtaTransactionManager.        logger.debug("Registering Spring transaction synchronization for new Hibernate Session");        SessionHolder holderToUse = sessionHolder;        if (holderToUse == null) {          holderToUse = new SessionHolder(session);        }        else {          holderToUse.addSession(session);        }        if (TransactionSynchronizationManager.isCurrentTransactionReadOnly()) {          session.setFlushMode(FlushMode.NEVER);        }        TransactionSynchronizationManager.registerSynchronization(            new SpringSessionSynchronization(holderToUse, sessionFactory, jdbcExceptionTranslator, true));        holderToUse.setSynchronizedWithTransaction(true);        if (holderToUse != sessionHolder) {          TransactionSynchronizationManager.bindResource (sessionFactory, holderToUse);        }      }      else {        // No Spring transaction management active -> try JTA transaction synchronization.        registerJtaSynchronization(session, sessionFactory, jdbcExceptionTranslator, sessionHolder);      }      // Check whether we are allowed to return the Session.      if (!allowCreate && !isSessionTransactional(session, sessionFactory)) {        closeSession(session);        throw new IllegalStateException("No Hibernate Session bound to thread, " +          "and configuration does not allow creation of non-transactional one here");      }      return session;    }

Spring源代码解析(八):Spring驱动Hibernate的实现(4)

时间:2011-03-29 javaeye jiwenke

这里就是在Spring中为使用Hiberante的SessionFactory以及Session做的准备工作, 在这个基础上,用户可以通过使用 HibernateTemplate来使用Hibernate的O/R功能,和以 前看到的一样这是一个execute的回调:

Java代码

public Object execute(HibernateCallback action, boolean exposeNativeSession) throws DataAccessException {      Assert.notNull(action, "Callback object must not be null");      //这里得到配置好的Hibernate的Session      Session session = getSession();      boolean existingTransaction = SessionFactoryUtils.isSessionTransactional(session, getSessionFactory());      if (existingTransaction) {        logger.debug("Found thread-bound Session for HibernateTemplate");      }      FlushMode previousFlushMode = null;    

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号