我有一个像这样使用Hibernate的Criteria
public class Student
{
private Integer id,discriminatorColumn,discriminatorValue;
//other stuff omitted for brevity
} 这个实体有一个discriminatorColumn,值从1到10 (从不NULL),每个discriminatorColumn都有一个discriminatorValue,它的值来自1 to 100 (从不NULL)。
示例:(学生数据)
ID DiscriminatorColumn DiscriminatorValue
1 1 3
2 2 4
3 1 13所以。
我正在尝试通过SUM获得一个DiscriminatorValue分组的DiscriminatorColumn
我的意思是,在前面的例子中,如果我使用DiscriminatorColumn = 1进行过滤,我就会收到SUM=16。
final Criteria criteria = session.createCriteria(Student.class)
.setProjection(Projections.sqlGroupProjection(
"sum({alias}.discriminatorValue) as rowCount",
"hibernateAlias.discriminatorColumn having rowCount>0",
new String[]{"rowCount"},
Helper.HIBERNATE_INTEGER_INSTANCE
));这创建了我看到的类似于这样的rightSQL
select sum(discriminatorValue) as rowCount
from student
group by discriminator_column
having rowCount>0我遇到的问题是,当我将resultSetTransformer设置为Student.class时,无法找到Hibernate填充sum of discriminatorValue列的方式,从而在discriminatorValue Java字段中得到结果。
我认为为此目的使用以下参数new String[]{"rowCount"}
但我试过了
new String[]{"discriminatorValue"}
new String[]{"this.discriminatorValue"}
new String[]{"{alias}.discriminatorValue"}
new String[]{"{studentAlias}.discriminatorValue"} using alias in Criteria
new String[]{"rowCount as discriminatorValue"}
new String[]{"rowCount as this_.discriminatorValue"}
and So On..但似乎不可能我做错了什么?不可能吗?Sum the values as set it as a simple Property as retrieving regular from database。
我已经写了我自己的变压器,但这有点烦人。
发布于 2015-05-14 11:46:40
我找到了答案:
Projections.sqlGroupProjection("sum({alias}.discriminatorValue) as rowCount","hibernateAlias.discriminatorColumn having rowCount>0",new String[]{"rowCount"},Helper.HIBERNATE_INTEGER_INSTANCE)似乎rowCount混叠在new String[]{"rowCount"}中只是为了MySQL语法或者被Criteria engine忽略了,您需要使用别名来填充EntityClass use outer alias instead的属性。
示例:
yourProjections.add(Projections.alias(Projections.sqlGroupProjection("sum({alias}.discriminatorValue) as rowCount","hibernateAlias.discriminatorColumn having rowCount>0",new String[]{"rowCount"},Helper.HIBERNATE_INTEGER_INSTANCE),"discriminatorValue"));只要将sqlGroupProjections封装在Projection.alias中,设置别名,匹配Java类中的属性,Hibernate就会填充和结果,而不是custom transformer are not longer required。
https://stackoverflow.com/questions/30215528
复制相似问题