Java 使用list()hibernate获取特定列
我有如下HibernateJava 使用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
条件
查询:
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
,然后转换为整数
,以便添加到列表中。查看此转换,但当我在条件中获得值时。列表()
它的对象,如果我通过对象[]
循环,我不能直接将它添加到列表
,当然是在对其强制转换整数之后?