【发布时间】:2026-01-12 09:45:02
【问题描述】:
如何在保持投影关闭的同时获得与使用投影的用户相关的所有权限?
用户
@ElementCollection
@Enumerated(EnumType.STRING)
private List<Permission> permissions;
权限
public enum Permission {
ADD, UPDATE, DELETE
}
UserRepository 查询
@Query("select u.username as username, p as permissions from User u "
+ "inner join u.permissions p"
List<UserWithPermissions> findAllProjection();
UserWithPermissions 投影
public interface UserWithPermissions {
String getUsername();
List<Permission> getPermissions();
}
我想得到的输出
User1 : ADD
User2 : ADD DELETE
我得到的输出
User1 : ADD
User2 : ADD
User2 : DELETE
【问题讨论】:
-
看起来您可能需要一个
group by u.username子句。 -
@Alexander 然后权限需要出现在
GROUP BY中,然后它实际上并没有做任何事情。我想,不知何故,我需要在投影中对其进行分组,也许为权限创建另一个接口,这将作为按 user.id 对其进行分组,尽管无法使其工作。 -
你的用户类是什么样子的?能给个代码吗?
-
您如何管理权限,将每个权限保留在单独的行中或将所有权限保留在单个列中。
-
@AtulSharma 单独,刚刚添加了我的用户类和权限字段。
标签: spring spring-boot spring-data-jpa spring-data