如何在JPA和Distinct中的两列上运行像SUM这样的聚合函数?

时间:2017-03-11 11:04:42

标签: jpa

现在我正在使用Hibernate 4.0.1的JPA,我有两个表关系ManyToOne(公司有很多合同)。

我要求对属于公司并具有特定州(RUNNING / CLOSED / ...)的合同的所有价值进行汇总。

我的Sql是这样的:

SELECT SUM(contract.totalAmount) FROM Contract contract, CompanyEntity company
WHERE contract.state LIKE :contractState AND contract.company.id = :companyId"

但它以某种方式返回重复的总数。 当我写SUM查询时,我读了这个post

所以我的问题是,我们可以在JPA NamedQuery中使用DISTINCT创建一个像SUM一样的聚合函数吗?

全心全意,

1 个答案:

答案 0 :(得分:0)

是的,查询中的SUM(distinct contract.totalAmount)会导致计算错误。正如JB Nizet所提到的,重复记录的原因是因为与companyEntity的交叉连接。正确的方法是明确使用join,然后对公司ID应用过滤器。

SELECT SUM(contract.totalAmount) FROM Contract contract Join contract.company cpy
WHERE contract.state LIKE :contractState AND cpy.id = :companyId

(假设公司是具有JoinTable注释的合约类中的变量名称)