如何在Hibernate Criteria中添加Distinct
在我的数据库中,我有一个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());
任何想法可能是什么原因,或任何其他方式过滤重复。
使用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();
其中YourBean.class具有属性“type”。 返回的列表将是List
。
尝试使用:
cr.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
它对我来说很完美
我终于找到了获取其他列的值:
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();
有同样的问题,最后使用Group By投影解决,然后添加我需要的所有列。 例如
Criteria query = session.createCriteria(Class.class) .setProjection(Projections.projectionList() .add(Projections.groupProperty("Col1"), "Col1") .add(Projections.groupProperty("Col2"), "Col2")) .setResultTransformer(Transformers.aliasToBean(Class.class)); List list = query.list();
尝试使用:
Criteria criteria = session.createCriteria(Test.class).setProjection( Projections.distinct(Projections.property("testType"))); List rsList = criteria.list();
预测仅提供标记属性的结果。 但是,它会给子实体带来问题。 查看我的post,了解我遇到的真正问题。
Hibernate:父子关系数据结构
尝试使用setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
Criteria crit = session.createCriteria(Test.class); 列表list = crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
- 在Hibernate标准结果中排除bean的字段
- Hibernate:直接在bean中设置Id或调用load()或get()方法之间的区别?
- Hibernate将两个表映射到一个类
- 使用列上的别名查询会出错
- Java SE + Spring Data + Hibernate
- 无法打开JPA EntityManager进行交易; 嵌套exception是java.lang.IllegalStateException
- Session.update和HibernateTemplate.merge之间的Hibernate更新之间的区别
- 期望在模型属性@RequestBody或@RequestPart参数之后立即声明Errors / BindingResult参数
- 筛选由jpa / hibernate查询返回的实体中包含的列表