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实体中新增工具方法,拼接好所有角色名后再给到视图层调用:
- 在User类中新增以下方法:
public String getRoleNames() { return roles.stream() .map(Role::getRole_name) .reduce((role1, role2) -> role1 + "、" + role2) .orElse("无分配角色"); }
- 视图层直接调用该方法取值:
<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
相关产品推荐
相关产品推荐

