Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 使用list()hibernate获取特定列_Java_Hibernate_Hql_Criteria - Fatal编程技术网

Java 使用list()hibernate获取特定列

Java 使用list()hibernate获取特定列,java,hibernate,hql,criteria,Java,Hibernate,Hql,Criteria,我有如下Hibernate条件查询: Criteria criteria = session.createCriteria(Test.class); ProjectionList projList = Projections.projectionList(); projList.add(Projections.property("Month")); projList.add(Projections.property("Year")); criteria.setProjection(Project

我有如下Hibernate
条件
查询:

Criteria criteria = session.createCriteria(Test.class);
ProjectionList projList = Projections.projectionList();
projList.add(Projections.property("Month"));
projList.add(Projections.property("Year"));
criteria.setProjection(Projections.distinct(projList));
在这里,我尝试使用月份和年份获取不同的值,类似于

从表中选择不同的月份、年份

最后,在完成查询后,我使用
list()
获取条件,如下所示:

criteriaList=criteria.list()

现在我有了
标准列表
作为
对象
,有两列数据
。我想在
criteriaList
中列出查询结果,只在
Month
中列出
list

我曾尝试循环使用
标准列表
,并将获取的
对象
转换为
列表
,但没有成功。如何从返回的两列中仅获取第一列(
Month)

注意:仅将预测设置为一列
(月)
将没有帮助,因为我需要在
月和
年进行区分

更新:

我使用了以下类型:

List<Object[]> criteriaList = Collections.emptyList();
List<Integer> Month = Collections.emptyList();
List-criteriaList=Collections.emptyList();
List Month=Collections.emptyList();

由于返回的月数会有所不同,我想将获取的月数添加到
列表中
,以便对其执行进一步的操作。

当使用
ProjectionList
时,如图所示,hibernate将返回
criteria.List()
上的
列表。在您的例子中,对象数组的第一个元素(0索引)是月,第二个元素(1索引)是年

因此,您必须处理对象数组列表,如下所示:

List<Object[]> criteriaList = criteria.list();
List<Integer> monthList = Collections.emptyList();

for (Object[] row : criteriaList) {
    try{
        BigDecimal month = row[0];
        monthList.add(month.intValueExact());
    catch(Exception e){
        //To deal with casting Exception, NPE and 
        //ArithmeticException if int conversion fails
    }

    //Do what you want ...
}
List criteriaList=criteria.List();
List monthList=Collections.emptyList();
对于(对象[]行:标准列表){
试一试{
BigDecimal月=行[0];
monthList.add(month.intValueExact());
捕获(例外e){
//处理铸造异常,NPE和
//整数转换失败时的算术异常
}
//做你想做的。。。
}
当然,我假设
投影。属性(“月”)
是一个
整数
对象,但我不知道,所以你必须正确地进行转换。
年也一样

当然,您也可以使用resultTransformer

编辑
在您提供有关您的评论的更多信息后,我刚刚编辑了我的建议块。

当使用
ProjectionList
时,如图所示,hibernate会返回
criteria.List()
上的
列表。在您的情况下,对象数组的第一个元素(0索引)是月,第二个元素(1索引)是年

因此,您必须处理对象数组列表,如下所示:

List<Object[]> criteriaList = criteria.list();
List<Integer> monthList = Collections.emptyList();

for (Object[] row : criteriaList) {
    try{
        BigDecimal month = row[0];
        monthList.add(month.intValueExact());
    catch(Exception e){
        //To deal with casting Exception, NPE and 
        //ArithmeticException if int conversion fails
    }

    //Do what you want ...
}
List criteriaList=criteria.List();
List monthList=Collections.emptyList();
对于(对象[]行:标准列表){
试一试{
BigDecimal月=行[0];
monthList.add(month.intValueExact());
捕获(例外e){
//处理铸造异常,NPE和
//整数转换失败时的算术异常
}
//做你想做的。。。
}
当然,我假设
投影。属性(“月”)
是一个
整数
对象,但我不知道,所以你必须正确地进行转换。
年也一样

当然,您也可以使用resultTransformer

编辑
在您提供有关您的评论的更多信息后,我刚刚编辑了我的建议块。

谢谢。您能根据我更新的问题提出一些建议吗?
Test.class
中的
month
属性的类型是什么?我明白了,并将month list的类型更改为
list month=Collections.emptyList()
但是在将
行[0]
添加到
月时,我得到
不支持操作异常
好的,尝试在时态变量中强制转换为
bigdecime
,然后转换为
整数
以添加到列表中。请参见此转换,但当我在
条件中获得值时。list()
它的对象,如果我在
对象[]中循环
我不能直接将其添加到
列表中吗?当然,在向其添加了
整数之后?谢谢。你能根据我更新的问题提出一些建议吗?
Test.class
中的
month
属性的类型是什么?我明白了,并将month list的类型更改为
list month=Collections.emptyList();
但是在将
行[0]
添加到
月时,我得到了
不支持的操作异常
那么,尝试在时态变量中强制转换为
BigDecimal
,然后转换为
整数
,以便添加到列表中。查看此转换,但当我在
条件中获得值时。列表()
它的对象,如果我通过
对象[]
循环,我不能直接将它添加到
列表
,当然是在对其强制转换
整数之后?