Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate Projections.sqlGroupProjection别名_Java_Mysql_Hibernate_Projection - Fatal编程技术网

Java Hibernate Projections.sqlGroupProjection别名

Java Hibernate Projections.sqlGroupProjection别名,java,mysql,hibernate,projection,Java,Mysql,Hibernate,Projection,我有一个标准像这样使用Hibernate public class Student { private Integer id,discriminatorColumn,discriminatorValue; //other stuff omitted for brevity } select sum(discriminatorValue) as rowCount from student group by discriminator_column having rowCount

我有一个
标准
像这样使用Hibernate

public class Student
{
    private Integer id,discriminatorColumn,discriminatorValue;
    //other stuff omitted for brevity
} 
select sum(discriminatorValue) as rowCount
from student
group by discriminator_column
having rowCount>0
此实体有一个
discriminatorColumn
,其值从1到10(从不
NULL
),每个
discriminatorColumn
都有一个
discriminatorValue
,其值从
1到100(从不
NULL

示例:(学生数据)

等等

我正试图通过
DiscriminatorColumn
获得
DiscriminatorValue
分组的
SUM

我的意思是,在上一个例子中,如果我按
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
我看到类似这样的东西

public class Student
{
    private Integer id,discriminatorColumn,discriminatorValue;
    //other stuff omitted for brevity
} 
select sum(discriminatorValue) as rowCount
from student
group by discriminator_column
having rowCount>0
问题是当我将
resultSetTransformer
设置为Student.class时,我无法找到Hibernate在
discriminatorValue
Java字段中填充
discriminatorValue
列result的
sum
的方式

为此,我认为应该使用以下参数
newstring[]{“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..
但似乎不可能我做错了什么?不可能吗<代码>将值求和设置为从数据库中检索规则时的简单属性


我已经写了我自己的变压器,但它有点烦人。

我自己找到了答案,我将在这里发布,以便能够帮助别人

Projections.sqlGroupProjection("sum({alias}.discriminatorValue) as rowCount","hibernateAlias.discriminatorColumn having rowCount>0",new String[]{"rowCount"},Helper.HIBERNATE_INTEGER_INSTANCE)
似乎
新字符串[]{“rowCount”}
中的
rowCount
别名仅用于mysql语法,或者仅被
标准引擎忽略
是否需要使用别名来填充EntityClass的属性改为使用
外部别名

例如:

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
包装在
投影中即可。别名
设置为与
Java类中的属性相匹配的别名
,Hibernate将使用求和结果填充,而非
不再需要自定义转换器

我希望能帮助别人

Projections.sqlGroupProjection("sum({alias}.discriminatorValue) as rowCount","hibernateAlias.discriminatorColumn having rowCount>0",new String[]{"rowCount"},Helper.HIBERNATE_INTEGER_INSTANCE)