gpt4 book ai didi

hibernate - 仅对对象使用 JPQL 选择列的子集

转载 作者:行者123 更新时间:2023-12-04 17:20:35 24 4
gpt4 key购买 nike

我有实体 Team、Game 和 TeamInGame。要选择按他们上一场比赛排序的球队,我使用:

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];
}
});

有没有办法摆脱这种转变?此查询不起作用:

return em.createQuery("select tg.team, max(tg.game.gameDate) as maxDate" +
" from TeamInGame tg" +
" group by tg.team" +
" order by maxDate desc", Team.class).getResultList();

最佳答案

简短的回答是否定的。如果没有在 select 子句中定义排序键,则不能在 JPQL 中按 order by,并且不能说服 TypedQuery不要返回 select 子句中的元素,因为那是查询的作用!

就我个人而言,我认为您所采用的 Transform 方法在代码方面是最简洁的。下一个最好的是@SJuan76 建议使用 JPQL Constructor Expressions 的东西.也许您甚至可以在 Team 本身上使用复制构造函数来完成此操作,这样您就不必创建中间 TeamResult 类。

关于hibernate - 仅对对象使用 JPQL 选择列的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14689223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com