开发者

Group by discriminator value in table per class hierarchy mapping

Is it possible to write a HQL query that groups results by the discriminator value of a table per class hierarchy mapping? For instance

"select discriminator d, c开发者_开发知识库ount(*) c from Foo group by discriminator"

with a mapping like

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

and a possible result like

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

So what I'm looking for is a valid replacment for discriminator in my HQL query. Is there such as thing or do I have to go for raw SQL?


The class attribute does that: from the Hibernate doc

The special property class accesses the discriminator value of an instance in the case of polymorphic persistence. A Java class name embedded in the where clause will be translated to its discriminator value.

from Cat cat where cat.class = DomesticCat

Apparently it is necessary to use aliases to refer to your entities when using the class attribute, at least in the version of Hibernate I'm using. So your HQL request should be:

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

And this will return arrays containing "BAR" and "BAZ" along with their respective counts.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜