Столбец обновления HQL с COUNT - PullRequest
0 голосов
/ 06 мая 2020

Я работаю с 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

1 Ответ

0 голосов
/ 06 мая 2020

Я нашел решение для запроса UPDATE .
Это просто

UPDATE Team t 
SET t.usersCount = (SELECT COUNT(u) from t.users u)

Он выполняет дополнительное соединение в таблице users пока таблица teams_users было бы достаточно, но хорошо ... Это работает.

Если у кого-то есть такое решение для SELECT one, мне все еще любопытно!

...