JPA QuerySyntaxException:意外的AST节点:{vector} For In condition

Anc*_*oli 7 java hibernate jpa

我正在尝试使用IN@Query注释的操作JPA.我收到以下错误: -

    antlr.NoViableAltException: unexpected AST node: {vector}
        at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2112)

    org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.hql.internal.ast.QuerySyntaxException: 
    unexpected AST node: {vector}
 [ [select o FROM Stock o where (:productlist_0_, :productlist_1_, :productlist_2_, :productlist_3_ is null or o.productsid IN (:productlist_0_, :productlist_1_, :productlist_2_, :productlist_3_) )
Run Code Online (Sandbox Code Playgroud)

我的Java代码如下: -

@Query("SELECT o FROM Stock o  where (:productlist is null or o.productsid IN (:productlist) ) ")
List<Stockdiary> getAllStock(Pageable pageable, @Param("productlist") List<Products> productlist)
Run Code Online (Sandbox Code Playgroud)

当我只有单个项目能正常工作productlist.但是当我有多个项目时,productlist查询出现如下并出现错误: -

select o FROM Stock o where (:productlist_0_, :productlist_1_, :productlist_2_, :productlist_3_ is null or o.productsid IN (:productlist_0_, :productlist_1_, :productlist_2_, :productlist_3_
Run Code Online (Sandbox Code Playgroud)

我看过这个链接,但这个解决方法对我不起作用.我试过:productlist带括号和没有括号的传球.

Ale*_*mov 6

我遇到了和您一样的问题,解决方案非常简单。解决后,我发现下一个变体工作正常:

@Query("select c from Cruise c where" +
        " (:categoryId is null or c.category.id = :categoryId)" +
        " and ((:portsIds) is null or c.port.id in (:portsIds))")
List<Cruise> findByRequestQuery(@Param("portsIds") List<Long> portsIds,
                                @Param("categoryId") Long categoryId);
Run Code Online (Sandbox Code Playgroud)

如此处所述:https : //stackoverflow.com/a/24551530/6629515您应该在集合参数中添加括号,对我来说,如果在每个集合参数中都提到添加括号,它会起作用:

(:portsIds)
Run Code Online (Sandbox Code Playgroud)

和结果SQL查询,其中部分看起来像:

where (? is null or cruise0_.category_id=?) and ((? , ? , ?) is null or cruise0_.port_id in (? , ? , ?))
Run Code Online (Sandbox Code Playgroud)

  • 也不适用于 db2。`(? , ? , ?) is null` 是无效语法 (2认同)