Ответ 1
Хорошо, что ваши исключения Dao не имеют отношения к уровню обслуживания, а уровень сервиса не имеет ничего общего с исключениями dao layer. Правильный подход состоял бы в том, чтобы поймать исключение dao и перестроить новое настраиваемое исключение на уровень сервиса.
Если вам нужно отлаживать исключения и вы хотите точную причину, вы можете использовать getCause() и getSuppressed().
Должен ли я обматывать этот вызов метода DAO блоком try-catch и реконструировать возможное исключение как ServiceException? Должен ли каждый метод DAO выбрасывать только PersistenceException?
--- > Да оберните его. Вы можете использовать другие исключения из уровня dao. См. Пример ниже:
public class MyDao {
public Entity getMyEntity(int id) throws ObjectNotFoundException, PersistenceException {
try {
// code to get Entity
// if entity not found then
throw new ObjectNotFoundException("Entity with id : " + id + "Not found.");
} catch(Exception e) { // you can catch the generic exception like HibernateException for hibernate
throw new PersistenceException("error message", e);
}
}
}