java - 如何检索具有不同列值的所有实体?

标签 java hibernate

在以下条件查询中

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/

相关文章:

java - 如何停止 intent.ACTION_CALL 一旦开始?

java - 如何在 android 中使用 dropbox api 直接从 Dropbox 流式传输 mp3 文件

hibernate - Elasticsearch 的性能是否会受到关系数据库模型(如MySQL)的影响?

java - 查询同一项时未命中ehcache

java - 使用 Java ImageIO 或 Imagemagick 将 DCI-P3 色彩空间转换为 sRGB

java - 确保路径字符串是有效的 java 路径字符串

java - 如何禁用 Spring/Hibernate/Hazelcast 联合缓存?

java - 在 Hibernate 的 XML 配置文件中指定默认值

mysql - c3p0 连接池总是达到最大

java - 代理仅忽略 httpS 请求的身份验证 header