【问题标题】:Using HQL to query on a Map's Values使用 HQL 查询地图的值
【发布时间】:2012-05-29 18:28:53
【问题描述】:

假设我有一张地图(称之为myClass.mapElem<Object, Object>),如下所示:

Key    Val
A      X
B      Y
C      X

我想编写可以查询 Values 的 HQL,这样我就可以取回 myClass 的所有实例,其中 mapElem 的值为“X”(其中“X”是一个完全填充的对象——我只是不想遍历每个元素并说 x.e1 = mapElem.e1 和 x.e2=... 等)。我知道我可以使用where ? in index(myClass.mapElem) 对键执行此操作,我只需要相应的语句来查询值!

提前谢谢...

ETA:不确定语法是否有所不同,但我实际查询的方式是这样的:

select myClass.something from myClass mc join myClass.mapElem me where...

【问题讨论】:

    标签: map hql


    【解决方案1】:

    你应该使用元素()。我尝试使用以下类模拟您的示例

    @Entity
    @Table(name="Dummy")
    public class TestClass {
        private Integer id;
        private Map<String, String> myMap;
    
        @Id
        @Column(name="DummyId")
        @GeneratedValue(generator="native")
        @GenericGenerator(name="native", strategy = "native")
        public Integer getId() {
            return id;
        }
    
        @ElementCollection
        public Map<String, String> getMyMap() {
            return myMap;
        }
    
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public void setMyMap(Map<String, String> myMap) {
            this.myMap = myMap;
        }
    }
    

    并保留了一些实例,其中包含与您的示例中的结构相似的映射。 (使用 因为您的示例中的值是字符串)

    以下查询为我提供了 TestClass 的所有实例,其中映射包含特定值

    SELECT DISTINCT myClass 
    FROM TestClass myClass JOIN myClass.myMap myMap 
    WHERE ? in elements(myMap)
    

    【讨论】:

      【解决方案2】:

      在我的特殊情况下,我最终不得不使用 SQL 查询。不理想,但确实有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多