我正在处理两个表users
和accounts
,它们与User
和Account
java实体相关联。
user
条目采用分层结构:user - >经理 - >管理
用户可以拥有帐户,管理员和管理员不能,层次结构由supervisor_id
建立,在这种情况下:user.supervisor_id = manager.id,manager.supervisor_id = admin.id。每个用户条目还有一个显示其角色的role
列,即user.role ='user',manager.role ='manager',admin.role ='admin'
帐户与用户关系由以下人员建立:
account.user_id = user.id,每个用户可以拥有多个帐户。 accounts
表格还有一个balance
列。
以下是我要做的事情,从管理方面来说,我想查看用户帐户的数量,以及帐户余额总数作为一个简单的统计数据。
我使用的JPQL查询是这样的:
SELECT COUNT(acct.id), COALESCE(SUM(acct.balance),0)
FROM Account acct, User user, User manager, User admin
WHERE user.supervisor_id = manager.id AND manager.supervisor_id = admin.id
AND admin.id = :adminId AND acct.user_id = user.id
:adminId是admin的id作为参数。此查询似乎从重复结果中检索数据,并且添加“AND”条件(如“user.role ='user'”)似乎不起作用。导致此查询返回重复结果的原因是什么以及如何解决?
感谢。
编辑: 我发现了一些错误:我忘了一些东西,一个用户可以直接在admin下,这就是为什么我将查询更改为:
SELECT COUNT(acct.id), COALESCE(SUM(acct.balance),0)
FROM Account acct, User user, User manager, User admin
WHERE (user.supervisor_id = manager.id AND manager.supervisor_id = admin.id
OR user.supervisor_id = admin.id)
AND admin.id = :adminId AND acct.user_id = user.id
问题仍然存在。