加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Hibernate条件使用GROUP BY和RETURN ENTITY LIST

发布时间:2020-12-15 00:55:53 所属栏目:Java 来源:网络整理
导读:我正在尝试在我的标准中使用GROUP BY.我需要这样做: SELECT b FROM Book b GROUP BY volumeCode; 我有以下代码: Criteria c = s.createCriteria(Book.class); c.setProjection(Projections.projectionList().add(Projections.groupProperty("volumeCode"))
我正在尝试在我的标准中使用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();

但是此标准仅返回volumeCodes(字符串列表).我需要获得一本书籍清单.所以我尝试使用变形金刚:

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

此代码返回空值列表.是否有可能用标准来做到这一点?

解决方法

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

例:

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

现在,转换器执行它所说的“Alias to 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的属性名称相匹配.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读