迁移到 Spring Boot 3.1.4 后,我在存储库中收到此错误。 (我在 Spring Boot 3.2 和 Hibernate 6.4 上也有同样的错误)
Could not create query for public abstract java.util.List com.xx.xx.xx.repository.IndemniteRepository.findAllForExport(com.xx.xx.xx.domain.penalite.AvisPenaliteStatutEnum,java.math.BigDecimal,java.util.List);
Reason: Validation failed for query for method public abstract java.util.List com.xx.xx.xx.repository.IndemniteRepository.findAllForExport(com.xx.xx.xx.domain.penalite.AvisPenaliteStatutEnum,java.math.BigDecimal,java.util.List)
代码片段:
@Repository
public interface IndemniteRepository extends JpaRepository<Indemnite, Long>, JpaSpecificationExecutor<Indemnite> {
@Query("SELECT ind FROM Indemnite ind " +
"WHERE ind.indemniteAFacturer > :indemniteAFacturer " +
"AND ind.avis.statut = :statut " +
"AND (:statut != com.xx.xx.xx.domain.penalite.AvisPenaliteStatutEnum.POUR_FACTURE AND ind.avis.facturationEnAttente IS TRUE OR ind.avis.facturationEnAttente IS FALSE) " +
"AND ind.avis.typePenalite.name IN :typePenalite " +
"ORDER BY ind.avis.date ASC")
List<Indemnite> findAllForExport(@Param("statut") AvisPenaliteStatutEnum statut,
@Param("indemniteAFacturer") BigDecimal indemniteAFacturer,
@Param("typePenalite") List<TypePenaliteEnum> typePenalite);
}
Caused by: org.hibernate.query.sqm.ParsingException line 1:241 no viable alternative at input 'SELECTindFROMIndemniteindWHEREind.indemniteAFacturer>:indemniteAFacturerANDind.avis.statut=:statutAND(:statut!=com.xx.xx.xx.domain.penalite.AvisPenaliteStatutEnum.POUR_FACTUREANDind.avis.facturationEnAttenteISTRUE'
在查询中两次引用相同的参数时,我遇到了同样的问题。解决方法是使用两个单独的参数,或者根据您的情况,您可以修改
"AND (:statut != com.xx.xx.xx...
到
"AND (ind.avis.statut != com.xx.xx.xx...