Hibernate exception translation covers NonUniqueObjectException to DuplicateKeyException case (SPR-8996)

This commit is contained in:
Juergen Hoeller 2012-01-05 15:18:42 +01:00
parent 211f8ea854
commit affa733927
2 changed files with 28 additions and 14 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2011 the original author or authors. * Copyright 2002-2012 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -32,6 +32,7 @@ import org.hibernate.FlushMode;
import org.hibernate.HibernateException; import org.hibernate.HibernateException;
import org.hibernate.Interceptor; import org.hibernate.Interceptor;
import org.hibernate.JDBCException; import org.hibernate.JDBCException;
import org.hibernate.NonUniqueObjectException;
import org.hibernate.NonUniqueResultException; import org.hibernate.NonUniqueResultException;
import org.hibernate.ObjectDeletedException; import org.hibernate.ObjectDeletedException;
import org.hibernate.PersistentObjectException; import org.hibernate.PersistentObjectException;
@ -58,6 +59,7 @@ import org.springframework.dao.CannotAcquireLockException;
import org.springframework.dao.DataAccessException; import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.dao.IncorrectResultSizeDataAccessException; import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.dao.InvalidDataAccessApiUsageException;
import org.springframework.dao.InvalidDataAccessResourceUsageException; import org.springframework.dao.InvalidDataAccessResourceUsageException;
@ -648,6 +650,17 @@ public abstract class SessionFactoryUtils {
if (ex instanceof JDBCException) { if (ex instanceof JDBCException) {
return new HibernateJdbcException((JDBCException) ex); return new HibernateJdbcException((JDBCException) ex);
} }
// end of JDBCException (subclass) handling
if (ex instanceof QueryException) {
return new HibernateQueryException((QueryException) ex);
}
if (ex instanceof NonUniqueResultException) {
return new IncorrectResultSizeDataAccessException(ex.getMessage(), 1, ex);
}
if (ex instanceof NonUniqueObjectException) {
return new DuplicateKeyException(ex.getMessage(), ex);
}
if (ex instanceof PropertyValueException) { if (ex instanceof PropertyValueException) {
return new DataIntegrityViolationException(ex.getMessage(), ex); return new DataIntegrityViolationException(ex.getMessage(), ex);
} }
@ -660,18 +673,12 @@ public abstract class SessionFactoryUtils {
if (ex instanceof ObjectDeletedException) { if (ex instanceof ObjectDeletedException) {
return new InvalidDataAccessApiUsageException(ex.getMessage(), ex); return new InvalidDataAccessApiUsageException(ex.getMessage(), ex);
} }
if (ex instanceof QueryException) {
return new HibernateQueryException((QueryException) ex);
}
if (ex instanceof UnresolvableObjectException) { if (ex instanceof UnresolvableObjectException) {
return new HibernateObjectRetrievalFailureException((UnresolvableObjectException) ex); return new HibernateObjectRetrievalFailureException((UnresolvableObjectException) ex);
} }
if (ex instanceof WrongClassException) { if (ex instanceof WrongClassException) {
return new HibernateObjectRetrievalFailureException((WrongClassException) ex); return new HibernateObjectRetrievalFailureException((WrongClassException) ex);
} }
if (ex instanceof NonUniqueResultException) {
return new IncorrectResultSizeDataAccessException(ex.getMessage(), 1, ex);
}
if (ex instanceof StaleObjectStateException) { if (ex instanceof StaleObjectStateException) {
return new HibernateOptimisticLockingFailureException((StaleObjectStateException) ex); return new HibernateOptimisticLockingFailureException((StaleObjectStateException) ex);
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2011 the original author or authors. * Copyright 2002-2012 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -23,6 +23,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException; import org.hibernate.HibernateException;
import org.hibernate.JDBCException; import org.hibernate.JDBCException;
import org.hibernate.NonUniqueObjectException;
import org.hibernate.NonUniqueResultException; import org.hibernate.NonUniqueResultException;
import org.hibernate.ObjectDeletedException; import org.hibernate.ObjectDeletedException;
import org.hibernate.PersistentObjectException; import org.hibernate.PersistentObjectException;
@ -47,6 +48,7 @@ import org.springframework.dao.CannotAcquireLockException;
import org.springframework.dao.DataAccessException; import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.dao.IncorrectResultSizeDataAccessException; import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.dao.InvalidDataAccessApiUsageException;
import org.springframework.dao.InvalidDataAccessResourceUsageException; import org.springframework.dao.InvalidDataAccessResourceUsageException;
@ -164,6 +166,17 @@ public abstract class SessionFactoryUtils {
if (ex instanceof JDBCException) { if (ex instanceof JDBCException) {
return new HibernateJdbcException((JDBCException) ex); return new HibernateJdbcException((JDBCException) ex);
} }
// end of JDBCException (subclass) handling
if (ex instanceof QueryException) {
return new HibernateQueryException((QueryException) ex);
}
if (ex instanceof NonUniqueResultException) {
return new IncorrectResultSizeDataAccessException(ex.getMessage(), 1, ex);
}
if (ex instanceof NonUniqueObjectException) {
return new DuplicateKeyException(ex.getMessage(), ex);
}
if (ex instanceof PropertyValueException) { if (ex instanceof PropertyValueException) {
return new DataIntegrityViolationException(ex.getMessage(), ex); return new DataIntegrityViolationException(ex.getMessage(), ex);
} }
@ -176,18 +189,12 @@ public abstract class SessionFactoryUtils {
if (ex instanceof ObjectDeletedException) { if (ex instanceof ObjectDeletedException) {
return new InvalidDataAccessApiUsageException(ex.getMessage(), ex); return new InvalidDataAccessApiUsageException(ex.getMessage(), ex);
} }
if (ex instanceof QueryException) {
return new HibernateQueryException((QueryException) ex);
}
if (ex instanceof UnresolvableObjectException) { if (ex instanceof UnresolvableObjectException) {
return new HibernateObjectRetrievalFailureException((UnresolvableObjectException) ex); return new HibernateObjectRetrievalFailureException((UnresolvableObjectException) ex);
} }
if (ex instanceof WrongClassException) { if (ex instanceof WrongClassException) {
return new HibernateObjectRetrievalFailureException((WrongClassException) ex); return new HibernateObjectRetrievalFailureException((WrongClassException) ex);
} }
if (ex instanceof NonUniqueResultException) {
return new IncorrectResultSizeDataAccessException(ex.getMessage(), 1, ex);
}
if (ex instanceof StaleObjectStateException) { if (ex instanceof StaleObjectStateException) {
return new HibernateOptimisticLockingFailureException((StaleObjectStateException) ex); return new HibernateOptimisticLockingFailureException((StaleObjectStateException) ex);
} }