Spring data jpa 3.1.4 - Hibernate 6.1.6.Final - 方法公共抽象 java.util.List 的查询验证失败

问题描述 投票:0回答:1

迁移到 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'
spring-data-jpa spring-boot-3 hibernate-6.x
1个回答
0
投票

在查询中两次引用相同的参数时,我遇到了同样的问题。解决方法是使用两个单独的参数,或者根据您的情况,您可以修改

 "AND (:statut != com.xx.xx.xx...

 "AND (ind.avis.statut != com.xx.xx.xx...
© www.soinside.com 2019 - 2024. All rights reserved.