java - 使用基于映射键的 HQL 选择值

标签 java hibernate hibernate-mapping

假设我有以下 JPA 映射。



    @Entity
    @Table(name = "transaction")
    public class Transaction {

        @ElementCollection(targetClass = String.class, fetch = FetchType.EAGER)
        @JoinTable(name = "trx_addi_info")
        private Map additionalInfo;


    }

我想编写 HQL 来获取在 additionalInfo 映射中具有特定键值对的所有交易。我想我必须像下面这样加入,



    SELECT trx FROM Transaction trx inner join trx.additionalInfo addInfo WHERE addInfo.????

但我不清楚如何放置 WHERE 子句以匹配 additionalInfo 映射中的特定键值对。有人可以帮我解决这个问题吗?

提前致谢。

最佳答案

您需要使用 HQL index() 特定函数,该函数适用于连接索引集合(数组、列表和映射)的别名。参见 14.10. Expressions 部分Hibernate 引用文档的

//Example of HQL returning `Transaction` object that have `additianlInfo` with   
//the `KEY` equal to the string `test`

SELECT trx FROM Transaction trx inner join trx.additionalInfo addInfo WHERE index(addInfo) > 'test' 

关于java - 使用基于映射键的 HQL 选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7101310/

相关文章:

java - Hibernate Validator - 添加动态 ConstraintValidator

java - ( Hibernate Oracle 无法插入 NULL ) 如何插入自动生成的 ID?

java - 使用 SimpleDateFormat,Java 的日期解析不正确

hibernate - 在不同的数据库中创建 envers 审计表,最好在不同的事务中完成日志记录

java - 具有多个 SELECT NEW 语句的 jpa 构造函数表达式

java - Hibernate: java.lang.ClassCastException: [Ljava.lang.Object;无法转换为database.entity.Dokumenty

mysql - key '1' 的重复条目 'UK_tbce3olw19taxx6srova86xok'

java - log4j,想在控制台中只显示调试(不是信息)并在应用程序启动时清除日志文件

java - 最终局部变量 checkstate 无法分配,因为它是在封闭类型中定义的

java - 如何使用模拟对象编写单元测试?