使用 list() hibernate 获取特定列
Fetching specific columns using list() hibernate
我有 Hibernate criteria
查询如下:
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));
我在这里尝试使用类似于
的月份和年份来获取不同的值
select distinct Month, Year from table;
最后,在完成查询后,我使用 list()
获取条件为:
criteriaList = criteria.list();
现在我有 criteriaList
作为 Object
和两列数据 Month
和 Year
。我想将 criteriaList
中的查询结果仅 Month
列出到 List<Integer>
.
我试过遍历 criteriaList
并将获取的 Object
转换为 List<Integer>
,但没有成功。如何仅从返回的两列中获取第一列 (Month)
?
注意: 将投影设置为仅一列 (Month)
无济于事,因为我需要在 Month
和 Year
[= 上区分31=]
更新:
我用过以下类型:
List<Object[]> criteriaList = Collections.emptyList();
List<Integer> Month = Collections.emptyList();
并且由于返回的月数会有所不同,我想将获取的月份添加到 List<Integer>
中以执行进一步的操作。
如您所示使用 ProjectionList
时,请在 criteria.list()
上休眠 returns List<Object[]>
。在您的例子中,对象数组第一个元素(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 ...
}
当然,我假设 Projections.property("Month")
是一个 Integer
对象,但我不知道,所以你必须正确转换。 Year
.
也一样
当然你也可以使用resultTransformer
编辑
在你提供更多关于评论的信息后,我刚刚编辑了我建议的区块。
我有 Hibernate criteria
查询如下:
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));
我在这里尝试使用类似于
的月份和年份来获取不同的值select distinct Month, Year from table;
最后,在完成查询后,我使用 list()
获取条件为:
criteriaList = criteria.list();
现在我有 criteriaList
作为 Object
和两列数据 Month
和 Year
。我想将 criteriaList
中的查询结果仅 Month
列出到 List<Integer>
.
我试过遍历 criteriaList
并将获取的 Object
转换为 List<Integer>
,但没有成功。如何仅从返回的两列中获取第一列 (Month)
?
注意: 将投影设置为仅一列 (Month)
无济于事,因为我需要在 Month
和 Year
[= 上区分31=]
更新:
我用过以下类型:
List<Object[]> criteriaList = Collections.emptyList();
List<Integer> Month = Collections.emptyList();
并且由于返回的月数会有所不同,我想将获取的月份添加到 List<Integer>
中以执行进一步的操作。
如您所示使用 ProjectionList
时,请在 criteria.list()
上休眠 returns List<Object[]>
。在您的例子中,对象数组第一个元素(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 ...
}
当然,我假设 Projections.property("Month")
是一个 Integer
对象,但我不知道,所以你必须正确转换。 Year
.
当然你也可以使用resultTransformer
编辑
在你提供更多关于评论的信息后,我刚刚编辑了我建议的区块。