现在我正在使用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一样的聚合函数吗?
全心全意,
答案 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注释的合约类中的变量名称)