首页 > 解决方案 > 带有 COUNT 的 HQL 更新列

问题描述

我正在使用 Hibernate,因此 HQL,链接到 PostgreSQL 数据库。
我有一个表users和一个表teams,它们与表中的ManyToMany条件相关联teams_users
我想更新选择表格team,以便该属性usersCount获取属于团队的用户数量。

我不想在@Formula我的实体类中添加一个,因为我不希望它一直被执行,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

标签: postgresqlhibernatehql

解决方案


我找到了UPDATE查询的解决方案。
简直是

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

它在桌子上进行了额外的连接,users而桌子teams_users就足够了,但是很好……它可以工作。

如果有人有SELECT的解决方案,我仍然很好奇!


推荐阅读