【发布时间】:2023-03-27 15:44:01
【问题描述】:
我有两个实体 User 和 Role。一个用户可以有多个角色,每个角色可以与多个用户相关联。即,用户角色具有多对多关系
例如:用户 Ram、Rob 和 John 是管理员
我正在创建用户和角色之间的连接表来存储信息。
@Entity
@Table(name = "account")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private int id;
@Column(unique = true)
private String username;
@Transient
@JsonIgnore
private String password;
@ManyToMany(fetch = FetchType.EAGER,cascade = CascadeType.)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
@Column
private boolean deleted;
}
和 Role.java
@Entity
@Table(name = "role")
@Data
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="role_id")
private int id;
@Column(name="role",unique=true)
private String role;
}
在 Spring Boot 中执行此操作时,将创建以下表:account、user_role、role。
因为我的角色数量是固定的。我手动插入了它们
INSERT INTO `role` VALUES (1,'ADMIN');
INSERT INTO `role` VALUES (2,'USER');
现在从我的 java spring boot 应用程序中,我尝试在帐户表中插入一个新条目。尝试在Role 表中插入一个新条目......我只想在account 和user_role 表中插入这个,而不是在role 表中......
谁能告诉我怎么做?
更新:
这里是账户插入部分(创建账户代码)
//创建账号
public Account createAccount(AccountDto account) {
Account newAccount = new Account();
newAccount.setPassword(account.getPassword());
newAccount.setUsername(account.getUsername());
Set<Role> roles = new HashSet<Role>();
Role role = new Role();
role.setRole(account.getRole());
roles.add(role);
newAccount.setRoles(roles);
Account savedAccount = save(newAccount);
return savedAccount;
}
//更新账号
public Account updateAccount(String oldUserName, AccountDto accountDto) {
Account account = accountRepository.findByUsername(oldUserName);
if (account != null) {
Set<Role> roleset = new HashSet<Role>();
if(accountDto.getRole() != null && !accountDto.getRole().isEmpty()){
Role role = roleRepository.findByRole(accountDto.getRole());
if (role == null) {
roleset.add(role);
}
}
account.setRoles(roleset);
account.setUsername(accountDto.getUsername());
account = accountRepository.save(account);
return account;
} else
return null;
}
【问题讨论】:
-
您的“在帐户表中插入新条目”代码可能很有用。我认为您正在尝试通过将其角色设置为
new Role()而不是首先从 db 获取角色来插入新用户。 -
"我尝试在帐户表中插入一个新条目"... 怎么样?你有什么代码可以分享给我们吗?
-
添加了 @KamilNoster 并插入和更新了一段代码
-
@lealceldeiro 添加代码
-
@stallion 我不确定您是如何尝试更新帐户的。
accountDto在这里的作用是什么?它应该带来必须设置为account的角色还是只是一个从数据库中获取的数据访问对象,某种存储库?
标签: java mysql spring hibernate jpa