java - 如何从一组角色中只获得一个角色
问题描述
我正在尝试实现一个简单的弹簧安全项目,基本上我有用户和角色实体。我有一组角色“管理员”和“用户”。
现在我只想分配“用户”角色以及创建一个新用户。
我曾尝试使用具有相同问题的列表和集合。
用户实体有 Set<Role>
public class User {
@Id
@Column(name = "user_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int user_id;
@NotNull
@Column(name = "user_name", unique = true)
private String userName;
@NotNull
@Column(name = "first_name")
private String firstName;
@NotNull
@Column(name = "last_name")
private String lastName;
@Column(name = "roles")
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;}
和角色实体:
public class Role {
}
@Id
private int role_id;
private String role;
}
这是将用户保存到我的数据库的 saveMyUser 方法。当我使用:
public void saveMyUser(User user) {
Set<Role> hash_Set = new HashSet<Role>();
user.setPassword(encoder().encode(user.getPassword()));
user.setRoles(new HashSet<>(roleRepository.findAll())); <--- Here
userRepository.save(user);
}
user.setRoles(new HashSet<>(roleRepository.findAll()));
将所有角色分配给用户,因为我只想为新用户分配“USER”角色。
我试过了user.setRoles(new HashSet<>(roleRepository.findByRole(2)));
,也试过user.setRoles(new HashSet<>(roleRepository.findByID(2)));
这个错误:无法推断 HashSet<> 的类型参数。
我的数据库中的角色表:
role_id role
1 ADMIN
2 USER
解决方案
构造HashSet
函数接受一个Collection
,而不是单个元素。这一行:
user.setRoles(new HashSet<>(roleRepository.findAll()));
使用您的所有角色创建一个新的 HashSet。这条线
user.setRoles(new HashSet<>(roleRepository.findByRole(2)));
尝试在构造函数中使用单个元素创建一个新的 HashSet,这将不起作用,因为 Role 不是 Collection 的实例。
只需获取您的角色,创建一个 HashSet,添加角色,然后设置用户的角色:
Role role = roleRepository.findByRole(2);
Set<Role> roles = new HashSet<>();
roles.add(role);
user.setRoles(roles);
推荐阅读
- tensorflow - Tensorflow 对象检测 API 的 Faster RCNN 配置中的 depth_multiplier 和 skip_last_stride
- flutter - Flutter 中两次 PUSH 事件是正常的吗?
- tensorflow - 无法序列化 tensorflow.GraphDef 类型的协议缓冲区,因为序列化大小 3459900923 字节将大于限制(2147483647 字节)
- python - 确定 dtypes 对象应该是 Int 还是 float
- android - 迁移到 Androidx 后无法解析符号 R
- android - 智能手表加速度计精度问题
- javascript - 在 javascript 或 typescript 中生成唯一的随机数
- tensorflow - 将 keras 模型转换为 tfjs 时出错:重复的权重名称变量
- laravel - 如何定义这个 hasManyThrough 关系?
- nginx - 为什么 nginx 将资产重定向到主页?