当我尝试删除用户实体时,如何解决双向多对多映射中的外部约束错误

问题描述 投票:0回答:0

我的 BlogUser 类中有这个

@ManyToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL) @JoinTable( name = "user_roles", joinColumns = @JoinColumn( name = "user_id", referencedColumnName = "id" ), inverseJoinColumns = @JoinColumn( name = "role_id", referencedColumnName = "id" ) ) private Set<Role> roles = new HashSet<>();

我的角色课上有这个

@ManyToMany(mappedBy = "roles",fetch = FetchType.LAZY) private Set<BlogUsers> blogUsers = new HashSet<>();

然后我尝试使用此服务删除

@Transactional @Override public void deleteUser(Long userId){ Optional<BlogUsers> optionalBlogUsers = blogUsersRepository.findById(userId); if(optionalBlogUsers.isEmpty()){ throw new ResourceNotFoundException("User with Id ("+userId+"), Does not Exist "); } if(optionalBlogUsers.get().getRoles().size() > 2){ throw new UnAuthorizedException("Not Authorized to Delete this User with id ("+userId+")"); } blogUsersRepository.deleteById(userId); }

我得到了这个错误

2023-04-22T08:30:16.316+01:00  WARN 7381 --- [io-8080-exec-10] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1451, SQLState: 23000 2023-04-22T08:30:16.316+01:00 ERROR 7381 --- [io-8080-exec-10] o.h.engine.jdbc.spi.SqlExceptionHelper   : Cannot delete or update a parent row: a foreign key constraint fails (
博客
.
user_roles
, CONSTRAINT 
FKh8ciramu9cc9q3qcqiv4ue8a6
 FOREIGN KEY (
role_id
) REFERENCES 
roles
 (
id`)) 2023-04-22T08:30:16.330+01:00 错误 7381 --- [io-8080-exec-10] o.a.c.c.C.[.[.[/].[dispatcherServlet]:Servlet.service() for servlet [dispatcherServlet]在路径 [] 的上下文中抛出异常 [请求处理失败:org.springframework.dao.DataIntegrityViolationException:无法执行语句; SQL [不适用];具有根本原因的约束 [null]]

java.sql.SQLIntegrityConstraintViolationException: 无法删除或更新父行:外键约束失败 在 com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:118) ~[mysql-connector-j-8.0.33.jar:8.0.33]`

    

spring-boot spring-data-jpa foreign-keys many-to-many
© www.soinside.com 2019 - 2024. All rights reserved.