【发布时间】:2021-08-26 11:27:26
【问题描述】:
我需要创建一个与以下示例相关的 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 列过滤数据库结果。
【问题讨论】:
-
你好@Ula,在继续之前你必须将你的通用列表解析为一个字符串:)
-
您好,谢谢您的回答。但是,当我尝试将它作为扁平字符串传递时,它也不起作用。
标签: java oracle spring-boot jpa