Spring坿旗鷹盾裂?伊??Spring駁強Hibernate議糞? - 園殻秘壇利
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代码
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |