2009-10-15 8 views
0

Je suit le mapping Hibernate 3 pour la classe utilisateur:Comment interroger des valeurs distinctes d'une carte avec une clé donnée dans Hibernate?

<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> 

je voudrais récupérer une liste de tous les datum_values ​​avec datum_key donné.

Dans la requête SQL ressemblerait à ceci:

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

Quelle serait l'approche la plus réaliste? Créer un nouveau mapping Hibernate pour user_metadata? Ou essayez d'obtenir une requête HQL/JPA QL en utilisant des indices/éléments renvoyant des valeurs (éventuellement scalaires)? Jusqu'à présent j'ai essayé un peu l'approche HQL/JPA QL et je ne suis pas allé trop loin.

Répondre

1

Il n'y a pas d'équivalent à votre requête SQL ci-dessus dans HQL. La fonction indices() ainsi que le déréférencement d'index ne peuvent être utilisés que dans la clause 'WHERE'.

La solution la plus simple est de mapper votre requête SQL comme requête nommée et l'exécuter comme scalar native SQL query.