带有 COUNT 的 HQL 更新列
HQL update column with COUNT
我正在使用 Hibernate 和 HQL,链接到 PostgreSQL 数据库。
我有一个 table users
和一个 table teams
通过 table teams_users
与 ManyToMany
条件链接。
我想 更新 或 select table team
所以 属性 usersCount
取属于一个团队的用户数量。
我不想添加一个@Formula
到我的实体Class,因为我不想它被执行所有次,这对于我不需要计数的大 JOIN FETCH
查询来说太浪费了。
换句话说,我想找到与以下 PSQL 查询等效的 HQL
UPDATE teams t
SET users_count = (SELECT COUNT(ut.*)
FROM teams t1
LEFT JOIN teams_users tu
ON t1.id = tu.team_id
WHERE t1.id = t.id
GROUP BY t1.id);
或
等同于以下内容
SELECT t.*, count(tu.*) AS users_count
FROM teams t
LEFT JOIN teams_users tu
ON t.id = tu.team_id
GROUP BY t.id;
不成功的尝试(得到一个想法)
UPDATE Team t SET
t.usersCount = COUNT(t.users)
UPDATE Team t SET
t.usersCount = (SELECT COUNT(t1.users) FROM Team t1 WHERE t1.id = t.id)
SELECT t, count(t.users) AS t.usersCount
FROM Team t
我找到了 UPDATE 查询的解决方案。
简直就是
UPDATE Team t
SET t.usersCount = (SELECT COUNT(u) from t.users u)
它在 table users
上进行了额外的连接,而 table teams_users
就足够了,但是很好......它有效。
如果有人有 SELECT 的解决方案,我仍然很好奇!
我正在使用 Hibernate 和 HQL,链接到 PostgreSQL 数据库。
我有一个 table users
和一个 table teams
通过 table teams_users
与 ManyToMany
条件链接。
我想 更新 或 select table team
所以 属性 usersCount
取属于一个团队的用户数量。
我不想添加一个@Formula
到我的实体Class,因为我不想它被执行所有次,这对于我不需要计数的大 JOIN FETCH
查询来说太浪费了。
换句话说,我想找到与以下 PSQL 查询等效的 HQL
UPDATE teams t
SET users_count = (SELECT COUNT(ut.*)
FROM teams t1
LEFT JOIN teams_users tu
ON t1.id = tu.team_id
WHERE t1.id = t.id
GROUP BY t1.id);
或
等同于以下内容
SELECT t.*, count(tu.*) AS users_count
FROM teams t
LEFT JOIN teams_users tu
ON t.id = tu.team_id
GROUP BY t.id;
不成功的尝试(得到一个想法)
UPDATE Team t SET
t.usersCount = COUNT(t.users)
UPDATE Team t SET
t.usersCount = (SELECT COUNT(t1.users) FROM Team t1 WHERE t1.id = t.id)
SELECT t, count(t.users) AS t.usersCount
FROM Team t
我找到了 UPDATE 查询的解决方案。
简直就是
UPDATE Team t
SET t.usersCount = (SELECT COUNT(u) from t.users u)
它在 table users
上进行了额外的连接,而 table teams_users
就足够了,但是很好......它有效。
如果有人有 SELECT 的解决方案,我仍然很好奇!