gpt4 book ai didi

java - 使用 GROUP BY 和 RETURN ENTITY LIST 的 Hibernate 标准

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:40:19 27 4
gpt4 key购买 nike

我正在尝试在我的条件中使用 GROUP BY。我需要这样做:

SELECT b FROM Book b GROUP BY volumeCode;

我有以下代码:

    Criteria c = s.createCriteria(Book.class);
c.setProjection(Projections.projectionList().add(Projections.groupProperty("volumeCode")));
List<Book> result = c.list();

但此条件仅返回 volumeCode(字符串列表)。我需要获取 Book 的列表。所以我尝试使用变形金刚:

    Criteria c = s.createCriteria(Book.class);
c.setProjection(Projections.projectionList().add(Projections.groupProperty("volumeCode")));
c.setResultTransformer(Transformers.aliasToBean(Book.class));
List<Book> result = c.list();

此代码返回空值列表。是否可以使用标准来做到这一点?

最佳答案

首先,投影会过滤检索到的数据量,如果你想要更多的数据,你也应该将这些属性添加到投影中。

例子:

c.setProjection( Projections.projectionList()
.add( Projections.property("id").as("id") )
.add( Projections.property("descripction").as("description") )
.add( Projections.groupProperty("volumeCode").as("volumeCode") ));

现在,转换器执行它所说的“Bean 的别名”,它会与您的 java bean“Book.java”的属性进行别名匹配。

编辑:

在没有转换器的情况下,如果投影有多个属性,结果是这样的:

for(Object[] item:criteria.list()){
System.out.println( (String)item[0] ); //ID
System.out.println( (String)item[1] ); //Description
System.out.println( (String)item[2] ); //Volume code
}

这就是为什么你得到强制转换异常,关于转换器,尝试将每个别名与你的 java bean 的属性名称匹配。

关于java - 使用 GROUP BY 和 RETURN ENTITY LIST 的 Hibernate 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16571129/

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