【发布时间】: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