Java “如何修复”;违反外键约束“;在Spring Boot中尝试删除记录时。使用@manytomen

Java “如何修复”;违反外键约束“;在Spring Boot中尝试删除记录时。使用@manytomen,java,spring-boot,foreign-keys,many-to-many,Java,Spring Boot,Foreign Keys,Many To Many,我试图从数据库中删除一些记录,但收到以下错误:“表“角色”上的更新或删除违反了表“用户\u角色”上的外键约束“fk3qjq7qsiigxa82jgk0i0wuq3g” 我做了一些研究,我发现这可能与我的一段关系被设置为“很多”有关 我试图修改我的代码从其他例子在这个网站上,但没有运气 公共类用户{ @身份证 @GeneratedValue(策略=GenerationType.AUTO) @列(name=“users\u id”) 私人长id; @列(name=“email”) @电子邮件(mes

我试图从数据库中删除一些记录,但收到以下错误:“表“角色”上的更新或删除违反了表“用户\u角色”上的外键约束“fk3qjq7qsiigxa82jgk0i0wuq3g”

我做了一些研究,我发现这可能与我的一段关系被设置为“很多”有关

我试图修改我的代码从其他例子在这个网站上,但没有运气

公共类用户{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“users\u id”)
私人长id;
@列(name=“email”)
@电子邮件(message=“*请提供有效电子邮件”)
@NotEmpty(message=“*请提供电子邮件”)
私人字符串电子邮件;
@列(name=“password”)
@长度(最小值=5,message=“*您的密码必须至少包含5个字符”)
@NotEmpty(message=“*请提供您的密码”)
私有字符串密码;
@列(name=“name”)
@NotEmpty(message=“*请提供您的姓名”)
私有字符串名称;
@列(name=“姓氏”)
@NotEmpty(message=“*请提供您的姓氏”)
私家姓;
@列(name=“active”)
私人int活动;
@多个(级联=级联类型.ALL)
@JoinTable(name=“users\u role”,joinColumns=@JoinColumn(name=“users\u id”),inverseJoinColumns=@JoinColumn(name=“role\u id”))
私人设定角色;
@列(name=“position”)
私有字符串位置;
公共类角色{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“role\u id”)
私有int-id;
公共类用户控制器{
.
.
.
.
@GetMapping(“/admin/deleteuser/{id}”)
公共字符串deleteUser(@PathVariable(“id”)长id,模型){
User User=userRepository.findById(Long.valueOf(id)).orelsetrow(()->new IllegalArgumentException(“无效的用户id:+id));
userRepository.delete(用户);
model.addAttribute(“users”,userRepository.findAll());
返回“/管理员/显示用户”;
}

问题似乎在这里:

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "users_role", joinColumns = @JoinColumn(name = "users_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Set<Role> roles;
但是,如果要级联,则需要指定所需的各个级联类型,省略
CascadeType.REMOVE
,可能类似于

    @ManyToMany(cascade = {CascadeType.DETACH, CascadeType.REFRESH})
    @JoinTable(name = "users_role", joinColumns = @JoinColumn(name = "users_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Set<Role> roles;
@ManyToMany(cascade={CascadeType.DETACH,CascadeType.REFRESH})
@JoinTable(name=“users\u role”,joinColumns=@JoinColumn(name=“users\u id”),inverseJoinColumns=@JoinColumn(name=“role\u id”))
私人设定角色;
    @ManyToMany(cascade = {CascadeType.DETACH, CascadeType.REFRESH})
    @JoinTable(name = "users_role", joinColumns = @JoinColumn(name = "users_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Set<Role> roles;