Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Hibernate 仅为对象使用JPQL select列的子集_Hibernate_Jpa_Jpa 2.0_Jpql - Fatal编程技术网

Hibernate 仅为对象使用JPQL select列的子集

Hibernate 仅为对象使用JPQL select列的子集,hibernate,jpa,jpa-2.0,jpql,Hibernate,Jpa,Jpa 2.0,Jpql,我有实体团队、游戏和团队。要选择按最后一场比赛排序的球队,我使用: Query query = em.createQuery("select tg.team, max(tg.game.gameDate) as maxDate" + " from TeamInGame tg" + " group by tg.team" + " order by maxDate desc"); return Lists.transform(query.getResultList(), new Function&l

我有实体团队、游戏和团队。要选择按最后一场比赛排序的球队,我使用:

Query query = em.createQuery("select tg.team, max(tg.game.gameDate) as maxDate" +
" from TeamInGame tg" +
" group by tg.team" +
" order by maxDate desc");

return Lists.transform(query.getResultList(), new Function<Object[], Team>() {
            @Override
            public Team apply(Object[] input) {
                return (Team) input[0];
            }
       });

您可以创建自己的对象来保存数据,并从JPQL填充数据。例如:

  ...("select new myPackage.TeamResult(tg.team, max(tg.game.gameDate)) from ..."
TeamResult必须:

具有与参数匹配的构造函数


b完全合格。

此查询不起作用-您是否收到异常? 另外,您是否可以在团队实体中添加maxDate属性? 不确定这是否适用于JPQL,但您可以尝试以下操作:

从中选择一个.teamid 从teamingame tg,game g中选择teamid,maxg.gamedate作为maxdate,其中tg.gameId=g.pk
group by teamid order by maxdate desc作为一个

简短的回答是否。如果没有在select子句中定义排序键,您就不能在JPQL中按order by排序,并且您也不能说服TypedQuery不返回select子句中的元素,因为查询就是这样做的


就我个人而言,我认为您使用的转换方法是最干净、最明智的代码。其次是@SJuan76建议使用的内容。也许您甚至可以在团队本身上使用一个复制构造函数,这样您就不必创建中间的TeamResult类。

谢谢。我不需要使用返回的日期。我认为从可读性和性能两个方面来看,我目前并不真正关心性能,只打算在需要的时候对其进行优化,因为使用函数的效果更好。当你说……这个查询不起作用……时,你会得到一个例外吗?这是怎么一回事?
  ...("select new myPackage.TeamResult(tg.team, max(tg.game.gameDate)) from ..."