Hibernate JPA: проблема с необязательным параметром в запросе к репозиторию - PullRequest
0 голосов
/ 14 декабря 2018

При выполнении кода ниже у меня появляется эта ошибка:

org.hibernate.HibernateException: Не удалось определить тип для класса: java.util.Optional

@Query("Select distinct  new com.myapp.web.rest.dto.AnalyseStockDTO(" +
            "a.lot.id,a.calibre, a.montantHt, l.valorisation, a.nbColis, 0, a.poidsNet, 0," +
            "(s.qteStock * s.lot.emballage.poidsNetStandard), s.qteStock-0, a.nbPieces, s.qteStock, a.prixUnitaire) " +
            "from Annonce a, Stock s, Lot l " +
            "where a.lot.dateArrivee >= :dateDebut and (:dateFin = null or a.lot.dateArrivee<=:dateFin) and a.lot.id not in (select distinct v1.lot.id from Vente v1) " +
            "and a.lot.id = s.lot.id and a.calibre = s.calibre and a.lot.id = l.id " +
            "and s.qteStock>0 ")
List<AnalyseStockDTO> getAnalyseStock(@Param("dateDebut") LocalDate dateDebut, @Param("dateFin") Optional<LocalDate> dateFin);

venteRepository.getAnalyseStock(dateDebut, Optional.ofNullable(dateFin));

Ты знаешь почему?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

1) Hibernate не поддерживает Optionals таким образом.Просто передайте null в качестве параметра и никогда не используйте сравнение по = null в ваших запросах.Используйте предложение :dateFin IS NULL, потому что NULL требуют специальной обработки в системах баз данных.

2) Не используйте Optionals в качестве параметров метода - Optional не был предназначен для этой цели. Почему в аргументах Java 8 необязательно использовать

0 голосов
/ 14 декабря 2018

Hibernate просто не знает, как обращаться с Optional, в качестве параметров запроса могут использоваться только простые типы.

Возможность иметь значение dateFin, равное нулю, управляется на уровне запроса, вы простоне нужно использовать Optional:

List<AnalyseStockDTO> getAnalyseStock(@Param("dateDebut") LocalDate dateDebut, @Param("dateFin") LocalDate dateFin);
venteRepository.getAnalyseStock(dateDebut, dateFin);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...