如何在HQL查询中使用键值在地图中进行搜索

How to use key value to search in map in HQL query

在 Java 中,当有带有字段价格和名称的对象书时 和 Map<Long, String> 书籍对象我在 where 子句上遇到问题我想进行以下查询:

SELECT b FROM books
WHERE (b.price, b.name) IN ((20, 'book1'), (30, 'book2'), (15, 'book3')) 

我找不到结果,尝试了 HQL query for id pairs / tuplesHow to check if a pair exists using HQL in query?JPA named query match a list of tuples in IN clause

大多数行值表达式谓词只是一些更冗长语法的语法糖。你的情况:

SELECT * 
FROM books b
WHERE (b.price = 20 AND b.name = 'book1')
   OR (b.price = 30 AND b.name = 'book2')
   OR (b.price = 15 AND b.name = 'book3')

请注意,如果您想动态构建这种谓词,您必须自己编写一个 SQL 构建器,将映射映射到 SQL 字符串和绑定变量集,或者使用现有的,例如 jOOQ

如果您想以这种方式模拟更复杂的语法,可以使用 jOOQ SQL translator 将它们从标准 SQL 转换为更基本的 SQL

(免责声明:我在 jOOQ 背后的公司工作)