【发布时间】:2022-09-24 15:43:19
【问题描述】:
我有这个错误的问题,我想从连接表 role_access 中删除特定数据,但删除表内的随机数据。我应用了多对多映射,其中包括角色、访问权限和链接表角色访问权限。我已经尝试使用迭代器删除(),但没有奏效。任何人请帮助我,谢谢。
在这里我分享我的代码:
角色.java
@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.REFRESH, CascadeType.MERGE, CascadeType.REMOVE,
CascadeType.PERSIST })
@JoinTable(name = \"role_access\", joinColumns = {
@JoinColumn(name = \"roleId\", referencedColumnName = \"rid\") }, inverseJoinColumns = {
@JoinColumn(name = \"accessId\", referencedColumnName = \"id\") })
private List<Access> access = new ArrayList<>();
角色控制器.java
@PostMapping(\"/delete/access/{roleName}\")
public ResponseEntity<Object> deleteRoleAccess(@PathVariable String roleName) {
return roleService.deleteRoleToAccess(roleName);
}
RoleRepository.java
@Repository
public interface RoleRepository extends JpaRepository<Role, Long> {
Optional<Role> findByRoleName(String roleName);
Optional<Role> findByRid(Long rid); }
角色服务.java
public ResponseEntity<Object> deleteRoleToAccess(String roleName) {
if (roleRepository.findByRoleName(roleName).isPresent()) {
Role r = roleRepository.findByRoleName(roleName).get();
for (int i = 0; i < r.getAccess().size(); i++) {
if (accessRepository.findByAccName(r.getAccess().get(i).getAccName()).isPresent()) {
Access access = r.getAccess().get(i);
delAccess(r, access.getAccName());
} else
return ResponseEntity.unprocessableEntity().body(\"Role name not found\");
}
roleRepository.save(r);
}
return ResponseEntity.ok(\"access is successfully delete\");
}
public void delAccess(Role role, String accName) {
Optional<Access> aOpt = accessRepository.findByAccName(accName);
if (!aOpt.isPresent()) {
throw new CustEmailNotFoundexception(\"Access name cannot be null\");
}
if (aOpt.isPresent() && aOpt.equals(aOpt)) {
role.getAccess().remove(aOpt.get());
}}
-
您需要更清楚地了解您要实现的目标。您是否只想删除角色具有给定角色名称的角色访问表中的所有条目?
-
@johnnyutts 好的,谢谢。是的,我想删除角色中的访问权限。我确实检查了 RoleService 文件。 public void removeRoleAccess(Role role, String accName) { Optional<Access> accessName = accessRepository.findByAccName(accName); if (!accessName.isPresent()) { throw new CustEmailNotFoundexception(\"访问名称不能为空\"); } role.getAccess().remove(accessName.get()); }
标签: java spring-boot arraylist spring-data-jpa