По непонятным причинам и вопреки Spring-овой консистентной иерархии исключений, в случае ошибки SDJ выбрасывает кастомный DbActionExecutionException вместо DataAccessException.
На исправленией этой проблемы есть две древних задачи в GitHub Issues проекта:
и никаких подвижек в её исправлении несколько лет.
Пока у команды не дошли руки до решения этой проблемы, её можно решить локально добавив в контекст приложения PersistenceExceptionTranslator:
@Component
class SdjPersistenceExceptionTranslator : PersistenceExceptionTranslator {
override fun translateExceptionIfPossible(ex: RuntimeException): DataAccessException? =
(ex as? DbActionExecutionException)?.cause as? DataAccessException
}