【问题标题】:SpringBoot named query: IN-clause not working for multiple valuesSpringBoot 命名查询:IN 子句不适用于多个值
【发布时间】:2018-12-22 00:10:22
【问题描述】:

“In 子句”不能传递多个值

存储库代码

@Query( "select myObject from MyObject myObject where myObject.anyColumn in :values" )
public List<MyObject> findPriDestByCntryAbbr(@Param("values") List<String> values);

从服务调用

List<String> values = Arrays.asList(valuesString.split(","));
List<MyObject> result = myObjectRepository.findByAnyColumns(values);

当我传递单个值时,它正在从表中检索正确的信息,但是在列表“值”中传递多个值时给出空结果

【问题讨论】:

  • 你检查values变量的内容了吗?
  • 是的,我确实'值'是正确的

标签: spring-boot named-query in-clause


【解决方案1】:

理想情况下它应该可以工作。您应该检查 values 变量。

您可以尝试的另一种方法是 - 无需编写查询。 根据doc,我们可以通过扩展 Repository 接口来创建 MyObjectRepository 接口,然后有一个方法来获取所有 MyObjects。它是这样的:

public interface MyObjectRepository extends Repository<MyObject,**Long**> {

List<MyObject> findBy**AnyColumn**In(Collection<String> values);

}

“AnyColumn”是您的列名,Repository 接口的第二个参数是根据您的要求。

【讨论】:

  • 我确实在上面做了,对于多个值 ['Val1', 'Val2'] 给出的错误作为 java.sql.SQLSyntaxErrorException: ORA-00907: 缺少右括号作为创建的查询有IN 子句的额外括号“Select Col1, Col2 From TableName WHERE (Col1 IN (('Val1', 'Val2')))”
  • 我认为是由于 eclipse-link Ref-link
猜你喜欢
  • 2016-01-14
  • 1970-01-01
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多