是否可以编写一个HQL查询,该查询根据每个类层次结构映射的表的鉴别值对结果进行分组?例如
"select discriminator d, count(*) c from Foo group by discriminator"
Run Code Online (Sandbox Code Playgroud)
像一个映射
<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>
Run Code Online (Sandbox Code Playgroud)
和一个可能的结果
+-----+---+
| d | c |
+-----+---+
| BAR | 3 |
| BAZ | 4 |
+-----+---|
Run Code Online (Sandbox Code Playgroud)
所以我正在寻找的是discriminator我的HQL查询中的有效替换.有什么东西或者我必须去原始SQL吗?
该class属性可以实现:来自Hibernate doc
在多态持久性的情况下,特殊属性类访问实例的鉴别器值.嵌入在where子句中的Java类名将被转换为其鉴别器值.
来自Cat cat,其中cat.class = DomesticCat
显然,在使用class属性时,有必要使用别名来引用你的实体,至少在我正在使用的Hibernate版本中.所以你的HQL请求应该是:
select f.class, count(*) c from Foo f group by f.class
Run Code Online (Sandbox Code Playgroud)
这将返回包含"BAR"和"BAZ"的数组及其各自的计数.
| 归档时间: |
|
| 查看次数: |
1176 次 |
| 最近记录: |