【问题标题】:How to pass List of Lists parameter in JPA native query [duplicate]如何在 JPA 本机查询中传递 List of Lists 参数 [重复]
【发布时间】:2021-08-26 06:18:27
【问题描述】:

我需要创建一个与以下示例相关的 JPA 原生查询:

select * from inventory where (server, product) in (('server1','product1'), ('server2','product2'), ('server1','product3'));

我创建了一个原生查询:

@Query(
            value = "select server, product from inventory where (server, product) in (:myList)",
            nativeQuery = true
    )
    List<Product> getProducts(List<List<String>> myList);

但是当我将列表列表作为参数传递时:

List<List<String>> myList= Arrays.asList(
    Arrays.asList("server1","product1"),
    Arrays.asList("server2","product2"),
    Arrays.asList("server1","product3")
);
List<Product> products = myRepository.getProducts(myList);

我收到一个错误

java.sql.SQLSyntaxErrorException: ORA-00920: invalid relational operator

我使用 Oracle 数据库。请告诉我,我做错了什么?

这个问题不是关于将平面列表传递到本机查询中以按 1 列过滤数据库结果(这很好用),而是如何传递嵌套列表列表 进入查询以按 2 列过滤 db 结果。

【问题讨论】:

  • (:myList) 替换为? 会发生什么
  • 如果我写:“……在?”我得到 java.lang.NullPointerException: null If I write "... in ?1" 我得到与以前相同的错误:java.sql.SQLSyntaxErrorException: ORA-00920: invalid relational operator
  • 这个问题不应该被关闭,这是一个与其他问题不同的问题......你想传递一个列表列表,而不是 Jpa 容易知道如何解包的类型列表: /

标签: java oracle spring-boot jpa spring-data-jpa


【解决方案1】:

使用这个:

@Query("select server, product from inventory where (server, product) in (:myList)",
        nativeQuery = true)
List<Product> getProducts(@Param("myList") List<List<String>> myList);

【讨论】:

  • 不幸的是,我得到了同样的错误 java.sql.SQLSyntaxErrorException: ORA-00920: invalid relational operator
猜你喜欢
  • 2021-05-10
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 2019-05-01
  • 2017-08-06
相关资源
最近更新 更多