You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot多对多关联下如何获取带角色的用户列表并展示role_name

问题根因

User实体中roles字段是List<Role>集合类型,并非单个Role对象,直接调用all_users.roles.role_name相当于试图从List集合上获取不存在的role_name属性,因此无法正常取值。

解决方案

方案1:视图层嵌套遍历角色集合(推荐)

如果允许一个用户展示多个角色,直接在Thymeleaf中嵌套遍历roles集合即可,修改视图层对应单元格的代码:

<td>
  <th:block th:each="role : ${all_users.roles}">
    <span th:text="${role.role_name}" style="margin-right: 6px;"></span>
  </th:block>
</td>

如果用户有多个角色,会自动并列展示所有角色名。

方案2:后端提前拼接角色名字符串

如果希望统一控制角色名的展示格式,也可以在User实体中新增工具方法,拼接好所有角色名后再给到视图层调用:

  1. 在User类中新增以下方法:
public String getRoleNames() {
    return roles.stream()
            .map(Role::getRole_name)
            .reduce((role1, role2) -> role1 + "、" + role2)
            .orElse("无分配角色");
}
  1. 视图层直接调用该方法取值:
<td th:text="${all_users.roleNames}" ></td>
优化建议

你的Thymeleaf外层循环变量命名可以调整,避免语义混淆:将<th:block th:each="all_users : ${all_users}">改为<th:block th:each="user : ${all_users}">,后续属性取user.nom、user.prenom可读性更高。
你当前配置的fetch = FetchType.EAGER已经可以在查询用户时自动加载关联的角色数据,不需要修改Service和Repository层的现有逻辑。


内容的提问来源于stack exchange,提问作者Makhoukh Youssef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:06:00