如何在Hibernate中使用给定键查询map中的不同值?

时间:2009-10-15 15:06:37

标签: hibernate jpa map hql

我对User类有以下Hibernate 3映射:

<class name="org.test.User" table="users">

... some other mapping...

    <map name="metadata" table="user_metadata">
        <cache usage="transactional"/>
        <key column="user_id" not-null="true" foreign-key="FK_USERMETADATA_USER_ID"/>
        <map-key type="string" column="datum_key" length="255" />
        <element type="string" column="datum_value" length="1024" not-null="true"/>
    </map>            
</class>

我想用给定的datum_key检索所有datum_values的列表。

在SQL中,查询看起来像:

select distinct datum_value from user_metadata where datum_key = 'Member Type'

最可行的方法是什么?为user_metadata创建一个新的Hibernate映射?或者尝试使用返回(可能是标量)值的索引/元素来进行HQL / JPA QL查询?到目前为止,我尝试了一些HQL / JPA QL方法,但我并没有走得太远。

1 个答案:

答案 0 :(得分:1)

在HQL中没有与上述SQL查询等效的内容。 indices()函数以及索引解除引用只能在'WHERE'子句中使用。

最简单的解决方案是将SQL查询映射为命名查询,并将其作为scalar native SQL query运行。