我正在尝试使用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
s(字符串列表)。我需要得到一份清单Book
s。所以我尝试使用变形金刚:
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();
此代码返回空值列表。是否可以通过标准来做到这一点?
首先,投影会过滤检索到的数据量,如果您想要更多数据,您也应该将这些属性添加到投影中。
Example:
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”的属性进行别名匹配。
Edit:
如果没有变压器,如果投影有多个属性,结果如下:
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 的属性名称相匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)