Как заставить репозиторий Spring Data JPA возвращать исключение при отсутствии результата?

#spring-data-jpa #spring-data

#spring-data-jpa #spring-data

Вопрос:

Я переношу существующий проект в репозитории Spring Data JPA.

В старом проекте мой DAOs выглядит так:

 public class MovieDAOImp implements MovieDAO {

    public Movie findByTitle(String title) throws NoResultException {
       /... query the db, if no Movie, throw new NoResultException */
    }

}
  

Новая реализация Spring JPA выглядит следующим образом …

 public interface MovieRepository extends JpaRepository<Movie, Integer> {

    Movie findByTitle(String title);

}
  

В новой версии findByTitle будет возвращено значение null, если фильма нет, но я хочу, чтобы он выдавал исключение (предпочтительно мое исключение NoResultException, но подойдет любое исключение).

Проблема, с которой я сталкиваюсь, заключается в том, что все мои сервисы реализованы в ожидании возникновения исключения NoResultException.

Я не хочу переделывать все свои сервисы для проверки на наличие нулей.

Есть ли способ заставить JpaRepository генерировать исключение при отсутствии результата?

Ответ №1:

Я не смог найти прямого ответа на свой вопрос, поэтому я придумал этот обходной путь…

Я продолжаю внедрять свой собственный DAO и использовать repo внутренне.

Преимущество этого заключается в том, что я получаю полный контроль над интерфейсом DAO, включая исключения, которые генерируются, поэтому мне не нужно переделывать свои сервисы.

Но у него есть недостаток в добавлении дополнительного слоя.

 public class MovieDAOImp implements MovieDAO {

    @Autowired
    private MovieRepository repo;

    public Movie findByTitle(String title) throws NoResultException {
        Movie ret = repo.findByTitle(title);
        if (ret == null) {
            throw new NoResultException("Unable to find movie by title '" title "'.");
        }
        return ret;    
    }

}
  

Если кто-нибудь придумает лучший способ сделать это, пожалуйста, отправьте ответ!