执行以下代码时,我出现此错误:
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));
你知道为什么吗?
答案 0 :(得分:1)
Hibernate只是不知道如何处理Optional
,只能将简单类型用作查询参数。
在查询级别管理dateFin
为空的可能性,您根本不需要使用Optional
:
List<AnalyseStockDTO> getAnalyseStock(@Param("dateDebut") LocalDate dateDebut, @Param("dateFin") LocalDate dateFin);
venteRepository.getAnalyseStock(dateDebut, dateFin);
答案 1 :(得分:1)
1)Hibernate不支持Optionals这样。只需传递null
作为参数,就不要在查询中使用= null
进行比较。使用:dateFin IS NULL
子句,因为NULL在数据库系统中需要特殊对待。
2)不要使用Optionals作为方法参数-并非为此目的而设计的。 Why should Java 8's Optional not be used in arguments