【问题标题】:How to use key value to search in map in HQL query如何在 HQL 查询中使用键值在 map 中进行搜索
【发布时间】:2019-06-22 12:31:39
【问题描述】:

在 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

【问题讨论】:

  • 第三个选项有什么问题:JPA 命名查询匹配 IN 子句中的元组列表?我没试过,但看起来不错。您能否分享您在使用第 3 个选项时遇到的错误?
  • 第三个选项涉及创建另一个我想避免的实体

标签: hibernate dictionary hashmap hql


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多