Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠条件内部联接以选择_Java_Hibernate_Criteria Api - Fatal编程技术网

Java 休眠条件内部联接以选择

Java 休眠条件内部联接以选择,java,hibernate,criteria-api,Java,Hibernate,Criteria Api,我必须将下一个表达式转换为hibernate标准api: select * from games gs INNER JOIN (select gg.ID, gg.CODE, max(gg.DATE) max_date from games gg where gg.player_id = 1 group by gg.ID, gg.CODE) ss on gs.CODE = ss.CODE and gs.ID = ss.ID and gs.DATE = ss.max_date and gs

我必须将下一个表达式转换为hibernate标准api:

select * from games gs
INNER JOIN (select gg.ID, gg.CODE, max(gg.DATE) max_date from games gg 
where gg.player_id = 1 group by gg.ID, gg.CODE) ss
 on gs.CODE = ss.CODE
 and gs.ID = ss.ID
 and gs.DATE = ss.max_date
 and gs.player_id = 1
我怎么做?我能够分别创建内部标准和外部标准,但不知道如何加入它们:

    DetachedCriteria innerCriteria = DetachedCriteria.forClass(Games.class, "gg");
    innerCriteria.add(Restrictions.eq("playerId", 1));
    ProjectionList projectionList = Projections.projectionList();
    projectionList.add(Projections.groupProperty("id"));
    projectionList.add(Projections.groupProperty("code"));
    projectionList.add(Projections.max("date"));
    innerCriteria.setProjection(projectionList);


Hibernate不支持
from
子句中的子查询。从:

请注意,HQL子查询只能出现在select或where中 条款

这是有道理的

您必须重写查询以避免这种情况,或者使用本机查询

    Criteria criteria = getSession().createCriteria(Games.class, "gs");
    criteria.add(Restrictions.eq("playerId", 1));
    criteria.setProjection(Projections.id());
    criteria.list();