gpt4 book ai didi

java - 使用 list() hibernate 获取特定列

转载 作者:太空宇宙 更新时间:2023-11-04 13:05:51 25 4
gpt4 key购买 nike

我有 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();

现在我有 criteriaListObject有两列数据 MonthYear 。我想在 criteriaList 中列出查询结果仅 Month进入List<Integer> .

我尝试循环criteriaList并转换获取的 ObjectList<Integer> ,但没有成功。如何从返回的两列中仅获取第一列(Month)

注意:仅将投影设置为一列 (Month)不会有帮助,因为我需要在两个 Month 上进行区分和Year

更新:

我使用了以下类型:

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

由于返回的月份数会有所不同,我想将获取的月份添加到 List<Integer> 中执行进一步的操作。

最佳答案

当使用ProjectionList时如您所示, hibernate 返回 List<Object[]>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 ...
}

当然,我假设 Projections.property("Month")Integer对象,但我不知道,所以你必须正确转换。 Year 相同.

当然,你也可以使用resultTransformer。

编辑

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

关于java - 使用 list() hibernate 获取特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34450197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com