在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
答案 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背后的公司工作)