diff --git a/src/Spring/Spring.Data.NHibernate/Data/NHibernate/HibernateTxScopeTransactionManager.cs b/src/Spring/Spring.Data.NHibernate/Data/NHibernate/HibernateTxScopeTransactionManager.cs index 9342eee6..fa51c74e 100644 --- a/src/Spring/Spring.Data.NHibernate/Data/NHibernate/HibernateTxScopeTransactionManager.cs +++ b/src/Spring/Spring.Data.NHibernate/Data/NHibernate/HibernateTxScopeTransactionManager.cs @@ -342,10 +342,12 @@ namespace Spring.Data.NHibernate /// protected override bool IsExistingTransaction(object transaction) { - return - ((HibernateTransactionObject)transaction).PromotableTxScopeTransactionObject.TxScopeAdapter. - IsExistingTransaction; - //return ((HibernateTransactionObject) transaction).HasTransaction(); + var hibernateTransactionObject = ((HibernateTransactionObject) transaction); + + var hasExistingPromotableTxScopeTransaction = hibernateTransactionObject.PromotableTxScopeTransactionObject.TxScopeAdapter.IsExistingTransaction; + var hasExistingTransaction = hibernateTransactionObject.HasTransaction(); + + return hasExistingPromotableTxScopeTransaction && hasExistingTransaction; } /// @@ -951,12 +953,14 @@ namespace Spring.Data.NHibernate } */ ISession session = txObject.SessionHolder.Session; + if (txObject.NewSessionHolder) { if (log.IsDebugEnabled) { log.Debug("Closing Hibernate Session [" + session + "] after transaction"); } + SessionFactoryUtils.CloseSessionOrRegisterDeferredClose(session, SessionFactory); } else @@ -970,9 +974,8 @@ namespace Spring.Data.NHibernate session.FlushMode = txObject.SessionHolder.PreviousFlushMode; } } + txObject.SessionHolder.Clear(); - - } private class HibernateTransactionObject : AdoTransactionObjectSupport