在我的数据库中,我有一个Test表,列有:testName,testType有两个不同的测试,类型相同,即"SUN",所以我只想要其中一个我在hibernate/criteria中使用Distinct,如下所示,它仍然给我两个与"太阳"同名的类型.
Criteria crit = session.createCriteria(Test.class);
final ResultTransformer trans = new DistinctRootEntityResultTransformer();
crit.setResultTransformer(trans);
List rsList = trans.transformList(crit.list());
Run Code Online (Sandbox Code Playgroud)
任何想法可能是什么原因,或任何其他方式过滤重复.
Dan*_*ndy 27
使用Projections.distinct.
Criteria crit = session.createCriteria(Test.class).setProjection(
Projections.distinct(Projections.projectionList()
.add(Projections.property("type"), "type") )
.setResultTransformer(Transformers.aliasToBean(YourBean.class));
List lst = crit.list();
Run Code Online (Sandbox Code Playgroud)
其中YourBean.class具有属性"type".返回的列表将是List<YourBean>.
小智 16
尝试使用:
cr.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Run Code Online (Sandbox Code Playgroud)
它对我来说很完美
我终于发现要获取其他列的值:
Criteria criteria = session.createCriteria(Test.class);
ProjectionList projectionList = Projections.projectionList();
ProjectionList projectionList2 = Projections.projectionList();
projectionList2.add(Projections.distinct(projectionList.add(Projections.property("distinctColumn"), "distinctColumn")));
projectionList2.add(Projections.property("col1"), "col1");
projectionList2.add(Projections.property("col2"), "col2");
criteria.setProjection(projectionList2);
criteria.setResultTransformer(Transformers.aliasToBean(Test.class));
List list = criteria.list();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72019 次 |
| 最近记录: |