Как запросить различные значения из карты с заданным ключом в Hibernate?

У меня есть следующее сопоставление Hibernate 3 для класса User:

<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_values ​​с заданным datum_key.

В SQL запрос будет выглядеть так:

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

Какой подход был бы наиболее целесообразным? Создать новое сопоставление Hibernate для user_metadata? Или попытаться создать запрос HQL/JPA QL, используя индексы/элементы, возвращающие (возможно, скалярные) значения? До сих пор я немного пробовал подход HQL/JPA QL, и я не зашел слишком далеко.


person Petteri H    schedule 15.10.2009    source источник


Ответы (1)


В HQL нет эквивалента приведенному выше SQL-запросу. Функция indices() а также разыменование индекса можно использовать только в предложении WHERE.

Самое простое решение — отобразить ваш SQL-запрос как именованный запрос и запустить его как собственный скалярный SQL-запрос.

person ChssPly76    schedule 15.10.2009