2010-06-25 4 views
4

Est-il possible d'écrire une requête HQL qui regroupe les résultats par la valeur discriminante d'un mappage de hiérarchie de table par classe? Donc ce que je suis à la recherche est un replacment valable pour discriminator dans ma requête HQL Par exempleGrouper par valeur de discriminateur dans le mappage de hiérarchie table par classe

"select discriminator d, count(*) c from Foo group by discriminator" 

avec une cartographie comme

<hibernate-mapping> 
    <class abstract="true" name="Foo"> 
    <!-- SNIP --> 
    <subclass name="Bar" discriminator-value="BAR"> 
     <!-- SNIP --> 
    </subclass> 
    <subclass name="Baz" discriminator-value="BAZ"> 
     <!-- SNIP --> 
    </subclass> 
    </class> 
</hibernate-mapping> 

et un résultat possible comme

+-----+---+ 
| d | c | 
+-----+---+ 
| BAR | 3 | 
| BAZ | 4 | 
+-----+---| 

. Y at-il une telle chose ou dois-je aller pour le SQL brut?

Répondre

6

L'attribut class le fait que: à partir de la mise en veille prolongée doc

La classe de propriété particulière accède à la valeur discriminante d'une instance dans le cas de persistance polymorphique. Un nom de classe Java incorporé dans la clause where sera traduit dans sa valeur de discriminateur.

de chat de chat où Cat.class = DomesticCat

Apparemment, il est nécessaire d'utiliser des alias pour faire référence à vos entités lorsque vous utilisez l'attribut de classe, au moins dans la version d'Hibernate j'utilise. Ainsi, votre demande de HQL devrait être:

select f.class, count(*) c from Foo f group by f.class 

Et cela renverra des tableaux contenant « BAR » et « baz » ainsi que leurs chefs respectifs.

Questions connexes