Я работаю с Hibernate, таким образом, HQL, связанный с базой данных PostgreSQL.
У меня есть таблица users
и таблица teams
, которые связаны с условием ManyToMany
через таблицу teams_users
.
Я хотел бы обновить или выбрать таблицу team
, чтобы свойство usersCount
принимало количество пользователей, принадлежащих к команде.
Я не хочу добавлять @Formula
к моему Entity Class, потому что я не хочу, чтобы он выполнялся все время, это слишком расточительно для большого JOIN FETCH
запроса где мне не нужен счет.
Другими словами, я хотел бы найти HQL-эквивалент следующего PSQL запроса
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);
OR
Эквивалент следующего
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