在以下条件查询中
Criteria criteria = createLogRecordCriteria(maxId, playerId, playerStatus, userCategory, from, to);
criteria.setFirstResult(offset);
criteria.setMaxResults(limit);
criteria.setProjection(Projections.distinct(Projections.property("player")));
List lst = criteria.list();
return lst;
我仅检索不同 player
的集合,但我需要停用具有不同 player
值的所有实体。如何通过criteria
来完成?
最佳答案
相信this是您正在搜索的查询。
对于以下查询:
select t from Table t where t.player IN (select distinct t.player from Table t );
如果 DetachedCriteria 是一个可行的选项,则可以将 subCriteria 传递给 mainCriteria,如下所示(前提是 subCriteria 应定义为 DetachedCriteria):
Criteria subCriteria = Criteria.forClass(Table.class);
subCriteria.setProjection(Projections.distinct(Projections.property("player")));
Criteria mainCriteria = createLogRecordCriteria(maxId, playerId, playerStatus, userCategory, from, to);
mainCriteria.add(Property.forName("t.player").in(subCriteria));
//adding the extra restrictions provided in the Question.
mainCriteria.setFirstResult(offset);
mainCriteria.setMaxResults(limit);
List lst = mainCriteria.list();
return lst;
如果没有,您必须获取'sub-criteria'的结果,然后将相同的结果(以Object[]或Collection的形式)作为参数传递给
> mainCriteria.add(Property.forName("t.player").in(Result_Of_subQuery));
希望这有帮助。
关于java - 如何检索具有不同列值的所有实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26906020/