【问题标题】:Using multiple keywords with LIKE in Postgresql through Spring Data JPA通过 Spring Data JPA 在 Postgresql 中使用 LIKE 的多个关键字
【发布时间】:2021-06-05 03:37:51
【问题描述】:

我需要定义一个 JPA 查询,翻译为:

SELECT
  *
from 
  items_table
where
  lower(CONCAT(item_id,' ', color,' ',details,' ')) like all ('{"%blue%", "%plastic%"}') and 
  store='Main' and 
  status='In Stock' and 
  item_type='Container';

所有的参数列表将与来自前端的 store、status 和 item_type 一起作为输入。

【问题讨论】:

  • 这个问题和json[]数据类型列有什么关系?
  • @crizzis 非常抱歉。

标签: spring postgresql spring-data-jpa spring-data


【解决方案1】:

我知道这是您遇到问题的第一个WHERE 条件。如果String[]-typed 参数没有解决它,请尝试使用this approach,希望LIKE ALL 将传递给生成的查询 - 诸如此类:

@Query("SELECT i FROM Item i WHERE LOWER(CONCAT(...)) LIKE ALL :terms AND ...")
List<Item> findByTerms(TypedParameterValue terms, ...)


itemRepository.findByTerms(new TypedParameterValue(StringArrayType.INSTANCE, terms), ...)

如果发现 JPA 不喜欢 LIKE ALL,您将不得不继续使用本机查询。

【讨论】:

  • 感谢您的回答,在尝试执行此操作时,我遇到了另一个错误,将尝试解决该问题,然后尝试此操作。
  • 谢谢,您的方法是使用字符串数组,但我遇到另一个错误:错误:操作 ANY/ALL(数组)需要右侧的数组。如果您知道可能的原因,请告诉我。
  • 这是postgres错误,所以LIKE ALL似乎成功通过了。我知道您将String[] 传递给条款?如果你用括号括起来:termsLIKE ALL (:terms)
猜你喜欢
  • 2019-07-16
  • 1970-01-01
  • 2014-08-31
  • 2016-06-26
  • 2021-09-27
  • 2019-02-03
  • 2012-07-04
  • 2020-02-02
  • 2018-01-21
相关资源
最近更新 更多