Я бы сказал, что вы в значительной степени там. Другое преимущество состоит в том, что существует семейство исключений DataAccessExceptions (CleanupFailure, SQLGrammar и т. Д.), Поэтому DAO можно запрограммировать так, чтобы он явно перехватывал конкретное исключение, которое вы могли ожидать.
Но поскольку вы обычно не ожидаете ошибки доступа к данным, вы все равно обычно оставляете ее необработанной, поэтому обычно не требуется полное назначение DataAccessException.
(Раньше я был большим поклонником иерархии DataAccessException, но я действительно нуждался в этом настолько редко, что теперь я счастлив иметь дело с необработанным JPAException).