我正在尝试在我的标准中使用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 }