如何在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 / tuples
和 How 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 背后的公司工作)
在 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 / tuples 和 How 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 背后的公司工作)