Propagate wrapped exception in SessionFactoryUtils
Improve stack traces in certain Hibernate failure cases by properly chaining the cause exception. Issue: SPR-7933
This commit is contained in:
parent
6809b234b1
commit
b0b1116f4b
|
|
@ -666,7 +666,7 @@ public abstract class SessionFactoryUtils {
|
||||||
return new HibernateObjectRetrievalFailureException((WrongClassException) ex);
|
return new HibernateObjectRetrievalFailureException((WrongClassException) ex);
|
||||||
}
|
}
|
||||||
if (ex instanceof NonUniqueResultException) {
|
if (ex instanceof NonUniqueResultException) {
|
||||||
return new IncorrectResultSizeDataAccessException(ex.getMessage(), 1);
|
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);
|
||||||
|
|
|
||||||
|
|
@ -294,7 +294,7 @@ public abstract class EntityManagerFactoryUtils {
|
||||||
return new EmptyResultDataAccessException(ex.getMessage(), 1);
|
return new EmptyResultDataAccessException(ex.getMessage(), 1);
|
||||||
}
|
}
|
||||||
if (ex instanceof NonUniqueResultException) {
|
if (ex instanceof NonUniqueResultException) {
|
||||||
return new IncorrectResultSizeDataAccessException(ex.getMessage(), 1);
|
return new IncorrectResultSizeDataAccessException(ex.getMessage(), 1, ex);
|
||||||
}
|
}
|
||||||
if (ex instanceof OptimisticLockException) {
|
if (ex instanceof OptimisticLockException) {
|
||||||
return new JpaOptimisticLockingFailureException((OptimisticLockException) ex);
|
return new JpaOptimisticLockingFailureException((OptimisticLockException) ex);
|
||||||
|
|
|
||||||
|
|
@ -21,9 +21,11 @@ package org.springframework.dao;
|
||||||
* for example when expecting a single row but getting 0 or more than 1 rows.
|
* for example when expecting a single row but getting 0 or more than 1 rows.
|
||||||
*
|
*
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
|
* @author Chris Beams
|
||||||
* @since 1.0.2
|
* @since 1.0.2
|
||||||
* @see EmptyResultDataAccessException
|
* @see EmptyResultDataAccessException
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("serial")
|
||||||
public class IncorrectResultSizeDataAccessException extends DataRetrievalFailureException {
|
public class IncorrectResultSizeDataAccessException extends DataRetrievalFailureException {
|
||||||
|
|
||||||
private int expectedSize;
|
private int expectedSize;
|
||||||
|
|
@ -63,6 +65,18 @@ public class IncorrectResultSizeDataAccessException extends DataRetrievalFailure
|
||||||
this.actualSize = -1;
|
this.actualSize = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for IncorrectResultSizeDataAccessException.
|
||||||
|
* @param msg the detail message
|
||||||
|
* @param ex the wrapped exception
|
||||||
|
* @param expectedSize the expected result size
|
||||||
|
*/
|
||||||
|
public IncorrectResultSizeDataAccessException(String msg, int expectedSize, Throwable ex) {
|
||||||
|
super(msg, ex);
|
||||||
|
this.expectedSize = expectedSize;
|
||||||
|
this.actualSize = -1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for IncorrectResultSizeDataAccessException.
|
* Constructor for IncorrectResultSizeDataAccessException.
|
||||||
* @param msg the detail message
|
* @param msg the detail message
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue