ege*_*ari 3 hibernate criteria max
我有一个Hibernate条件查询错误地提取最大结果.在许多情况下,当我指定20个最大结果时,查询实际上只返回1或5个结果,因为限制会返回许多重复项.
Criteria c = session.createCriteria(DomainObject.class);
c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
c.createAlias("tags.list", "tag");
c.createAlias("names", "name");
c.createAlias("site", "site");
c.createAlias("site.tags.list", "siteTag");
// loads of or/and eq/like restrictions.
c.setFirstResult(0);
c.setMaxResults(20);
return c.list();
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题,以便如果我说20个最大结果,它确实会返回20区结果?hibernate将查询限制为20个结果,并且在数据库级别而不是在数据库级别进行不同的过滤,这似乎很疯狂.
救命?
我认为你很接近,你只需要一个不同的ID列表,而不是不同的对象.
尝试将此添加到您的条件:
criteria.setProjection(Projections.distinct(Projections.property("Id")));
Run Code Online (Sandbox Code Playgroud)
这样做的原因是因为投影将执行清晰度检查作为sql查询的一部分,而不是ResultTransformer在执行sql查询后过滤结果的不同之处.