Update of /cvsroot/springnet/Spring.Net/src/Spring/Spring.Data.NHibernate/Data/NHibernate
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv4367
Modified Files:
HibernateTransactionManager.cs SessionFactoryUtils.cs
Log Message:
SPRNET-778 - AdoExceptionTranslator in HibernateTransactionManager did not have a default value
Index: SessionFactoryUtils.cs
===================================================================
RCS file: /cvsroot/springnet/Spring.Net/src/Spring/Spring.Data.NHibernate/Data/NHibernate/SessionFactoryUtils.cs,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** SessionFactoryUtils.cs 19 Sep 2007 22:58:22 -0000 1.3
--- SessionFactoryUtils.cs 20 Nov 2007 04:03:43 -0000 1.4
***************
*** 453,456 ****
--- 453,468 ----
}
+ if (ex is PropertyValueException)
+ {
+ return new DataIntegrityViolationException(ex.Message, ex);
+ }
+ if (ex is PersistentObjectException)
+ {
+ return new InvalidDataAccessApiUsageException(ex.Message, ex);
+ }
+ if (ex is NonUniqueResultException)
+ {
+ return new IncorrectResultSizeDataAccessException(ex.Message, 1);
+ }
// fallback
return new HibernateSystemException(ex);
Index: HibernateTransactionManager.cs
===================================================================
RCS file: /cvsroot/springnet/Spring.Net/src/Spring/Spring.Data.NHibernate/Data/NHibernate/HibernateTransactionManager.cs,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** HibernateTransactionManager.cs 19 Sep 2007 22:58:22 -0000 1.5
--- HibernateTransactionManager.cs 20 Nov 2007 04:03:43 -0000 1.6
***************
*** 79,82 ****
--- 79,84 ----
private IAdoExceptionTranslator adoExceptionTranslator;
+ private IAdoExceptionTranslator defaultExceptionTranslator;
+
/// <summary>
/// Just needed for entityInterceptorBeanName.
***************
*** 201,204 ****
--- 203,231 ----
/// <summary>
+ /// Gets the default IAdoException translator, lazily creating it if nece
+ /// </summary>
+ /// <value>The default IAdoException translator.</value>
+ public IAdoExceptionTranslator DefaultAdoExceptionTranslator
+ {
+ get
+ { lock(this)
+ {
+ if (defaultExceptionTranslator == null)
+ {
+ if (dbProvider != null)
+ {
+ defaultExceptionTranslator = new ErrorCodeExceptionTranslator(dbProvider);
+ }
+ else
+ {
+ defaultExceptionTranslator = SessionFactoryUtils.NewAdoExceptionTranslator(SessionFactory);
+ }
+ }
+ return defaultExceptionTranslator;
+ }
+ }
+ }
+
+ /// <summary>
/// Gets or sets the SessionFactory that this instance should manage transactions for.
/// </summary>
***************
*** 518,522 ****
{
txObject.SessionHolder.Transaction.Commit();
-
}
// Note, unfortunate collision of namespaces/classname for NHibernate.TransactionException
--- 545,548 ----
***************
*** 533,547 ****
if (hibEx != null)
{
throw ConvertHibernateAccessException(hibEx);
}
throw;
! }
!
! /*catch (HibernateException ex)
! {
! // assumably failed to flush changes to database
! throw ConvertHibernateAccessException(ex);
! }*/
!
}
--- 559,567 ----
if (hibEx != null)
{
+ // assumably failed to flush changes to database
throw ConvertHibernateAccessException(hibEx);
}
throw;
! }
}
***************
*** 650,656 ****
protected virtual DataAccessException ConvertHibernateAccessException(HibernateException ex)
{
! if (ex is ADOException)
{
! return ConvertAdoAccessException((ADOException) ex);
}
return SessionFactoryUtils.ConvertHibernateAccessException(ex);
--- 670,680 ----
protected virtual DataAccessException ConvertHibernateAccessException(HibernateException ex)
{
! if (AdoExceptionTranslator != null && ex is ADOException)
{
! return ConvertAdoAccessException((ADOException) ex, AdoExceptionTranslator);
! }
! else if (ex is ADOException)
! {
! return ConvertAdoAccessException((ADOException)ex, DefaultAdoExceptionTranslator);
}
return SessionFactoryUtils.ConvertHibernateAccessException(ex);
***************
*** 666,674 ****
/// The corresponding DataAccessException instance
/// </returns>
! protected virtual DataAccessException ConvertAdoAccessException(ADOException ex)
{
//TODO should be pass in innerexception or just exception?
! return AdoExceptionTranslator.Translate(
! "Hibernate operation: " + ex.Message, null, ex.InnerException);
}
--- 690,697 ----
/// The corresponding DataAccessException instance
/// </returns>
! protected virtual DataAccessException ConvertAdoAccessException(ADOException ex, IAdoExceptionTranslator translator)
{
//TODO should be pass in innerexception or just exception?
! return translator.Translate("Hibernate flusing: " + ex.Message, null, ex.InnerException);
}
|