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

时间:2019-01-29 11:29:08

标签: hibernate dictionary hashmap hql

在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

1 个答案:

答案 0 :(得分:0)

大多数行值表达式谓词只是一些更详细语法的语法糖。就您而言:

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 < / p>

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

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