JPQL选择查询,无法分组依据

时间:2020-05-11 17:15:13

标签: java mysql jpa jpql

几个小时后,我似乎找不到解决方法,我有2个实体:

public class Price{
@Id
int id;

@Temporal(TemporalType.DATE)
private Date dtComu;

private String descCarb;

private Double price;

//bi-directional many-to-one association to Distributor
@ManyToOne
@JoinColumn(name="idImpiant")
private Distributor distributor;

AND

public class Distributor{

@Id
private int idImpiant;

private String province;

//bi-directional many-to-one association to Price
@OneToMany(mappedBy="distributor")
private List<Price> prices;

我需要做的似乎很简单,对于每个分销商,获取最新价格。我想得到的是价格列表(每个价格都有一个分销商),按日期排序,按分销商分组。我的查询是:

SELECT e FROM Price e JOIN e.distributor d WHERE e.descCarb like '%Diesel%' group by e.distributor order by e.dtComu desc

我得到的错误是:

SELECT列表不在GROUP BY子句中,并且包含未聚合的列表 列“ price0_.id”在功能上不依赖于 GROUP BY子句

还有我没想到要实现这一目标的方法吗?

1 个答案:

答案 0 :(得分:1)

您看到的错误是由于不清楚每个分销商组要哪个实体。这是使用HQL做到这一点的一种方法:

select e FROM Price e JOIN e.distributor d
where e.descCarb like '%Diesel%' and
      e.dtComu = (select max(ee.dtComu) from Price ee where ee.distributor = e.distributor)

这使用相关子查询来检查匹配的Price实体是否是每个分销商的最新实体。