#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;
}
}
Если кто-нибудь придумает лучший способ сделать это, пожалуйста, отправьте ответ!