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带括号和没有括号的传球.
我遇到了和您一样的问题,解决方案非常简单。解决后,我发现下一个变体工作正常:
@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)
| 归档时间: |
|
| 查看次数: |
5543 次 |
| 最近记录: |