class Cat {
long id;
String name;
int age
}
List<Cat> results = (List<Cat>) session.createCriteria(Cat.class)
.setProjection( Projections.projectionList()
.add( Projections.distinct(Projections.property("id")) )
)
.list();
在没有设置投影的情况下它完美地工作,但是由id重复。 当我们添加set projection时,查询只返回一个列表,如果是id(1,2,3)。
如何更改以返回猫和非重复ID的列表?
答案 0 :(得分:1)
一种选择是在条件对象上使用setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
。但它不是在数据库方面实现的 - 它是以程序方式过滤的(在数据库查询被触发后,Hibernate会过滤不同的行)。
另一个更好的选择是使用setResultTransformer(new AliasToBeanResultTransformer(Cat.class))
,您需要使用与上述不同的投影,并且还要对要在Cat实体中填充的所有属性进行投影。这在SQL查询中使用了distinct关键字,因此在DB中进行过滤
您可以查看此hibernate forum - select distinct entities using Criteria以获取有关相关讨论的示例和更多信息。