【发布时间】:2014-12-03 17:31:14
【问题描述】:
我正在尝试获取组目录中包含的文件大小的总和。 但是,由于从联接返回的行数,大小正在成倍增加。我的查询中还包含其他表来获取历史信息。我有一个 PostgreSQL 数据库,并且在我的存储库界面中使用休眠查询。
在线,它说我需要子查询我的聚合。但是,我需要加入所有这些表以获取与目录相关的文件,这些文件与与组相关的用户相关。我怎样才能做一个不同的总和?
@Query(value = "select a.username as name, sum(d.filesize) as size"
+ "from usergroup a "
+ "join a.nuser b "
+ "join b.directory c "
+ "join c.files d "
+ "join b.nuserhistory e"
+ "group by a.name"
+ "having count(e) > b.maxCount")
表之间的关系:
- 许多用户组到许多 nusers。
- 一个 nuser 拥有多个目录。
- 多个文件到一个目录。
- 一位用户了解许多历史。
【问题讨论】:
-
join.b.history e是哪一行?看起来像一个错字。此外,所有连接条件都丢失了,group和user是保留字,不能像这样用作不带引号的标识符。请提供有效的语法。 -
抱歉,我试图简化查询的语法以更清楚地显示我遇到的问题,我还不得不更改一些模型名称。
-
仍然缺少加入条件。这些对于答案是必不可少的。此外,必须了解您的关系设计(表定义)才能了解乘法发生的位置。这是一个相关的答案和解释:stackoverflow.com/questions/12464037/…
-
添加了连接条件。因为这是一个休眠 jpa 查询,所以条件是在模型中指定的,而不是在查询中。
标签: sql hibernate postgresql jpa aggregate-functions