【问题标题】:How to query multiple accepted values with @Query in JPA and JPQL?如何在 JPA 和 JPQL 中使用 @Query 查询多个接受的值?
【发布时间】:2020-06-18 14:37:32
【问题描述】:
@Query("Select DISTINCT ord from Order ord where ord.status = :status)
public Page<Order> search(String status) ;

有没有办法让状态匹配多个值?

喜欢 GET /search?status="done or pending"

【问题讨论】:

  • @Query("Select DISTINCT ord from Order ord where ord.status in :statusList") public Page search(List statusList) ;
  • 这几乎可以工作,但在我的查询中我有(ord.status in :statusList 或 :statusList 为空)并且第二部分中断。错误。 org.hibernate.hql.internal.ast.QuerySyntaxException:意外的 AST 节点:{vector} –

标签: spring hibernate jpa jpql


【解决方案1】:

@User9123 说对了,

@Query("Select DISTINCT ord from Order ord where (ord.status in :statusList or ord.status is null)") 
public Page<Order> search(List<String> statusList) ; 

还可以像这样在控制器更改请求中获取参数列表。

GET /search?status=done,pending

在控制器中

@RequestMapping("/search")
public void search(@RequestParam List<String> statusList) 
{
   // Handle values here
}

【讨论】:

  • 这几乎可以工作,但在我的查询中我有(ord.status in :statusList 或 :statusList 为空)并且第二部分中断。错误。 org.hibernate.hql.internal.ast.QuerySyntaxException:意外的 AST 节点:{vector}
  • 不,你误会了,我允许输入参数为空,而不是实体。问题是当该值是一个列表时,它不能与 null 进行比较
  • 没明白,你的意思是这样 where ord.status in ('done','pending','null')
  • 不,我的意思是像 GET /search?status="" 这样的查询。现在抛出异常。错误是这个“org.hibernate.hql.internal.ast.QuerySyntaxException: 意外的 AST 节点: {vector}: AND (ord.status in (:statusList_0, :statusList_1) or (:statusList_0, :statusList_1 is null)”跨度>
  • 如果没有应用状态过滤器,最好在客户端处理它,这样它将调用 GET /search 并且不会应用过滤器。在控制器中,statusList 将为空白,因此您可以使用不带状态参数的搜索覆盖方法。
猜你喜欢
  • 2015-08-05
  • 2017-11-28
  • 2021-10-31
  • 2017-06-13
  • 2011-10-02
  • 2015-07-15
  • 2018-01-23
  • 2017-10-23
  • 1970-01-01
相关资源
最近更新 更多