Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多对多关系springboot mysql_Java_Mysql_Spring Boot_Api_Many To Many - Fatal编程技术网

Java 多对多关系springboot mysql

Java 多对多关系springboot mysql,java,mysql,spring-boot,api,many-to-many,Java,Mysql,Spring Boot,Api,Many To Many,我有两个模型用户和角色,这是一个多对多关系。 我需要添加一个用户,并给他一个已经存在于我的数据库中的特定角色。 ------使用者------ 这是我随api请求发送的json正文 { "userId" : 7, "name": "test", "lastname": "testlast", "email": &q

我有两个模型用户和角色,这是一个多对多关系。 我需要添加一个用户,并给他一个已经存在于我的数据库中的特定角色。 ------使用者------

这是我随api请求发送的json正文

{
        "userId" : 7,
        "name": "test",
        "lastname": "testlast",
        "email": "testtest@yahoo.com",
        "password": "test123",
        "lastActive": "04/05/21",
        "createdDate": "02/04/20",
        "institution": {
            "institutionId": 4
            },
       "roles": [
            {
                "roleId": 2
            }
        ],  
        "active": false,
        "blocked": true
    }
对我的用户来说一切都很好,角色表中添加了一条userId=7和roleId=2的记录 但问题是表角色正在更新,字段名称和描述正在被删除并替换为空值。。。
有什么想法请

你已经添加了
CascadeType。坚持
用户
角色
@manytomy加入。
用户
实体被持久化到EntityManager时,它还将持久化
角色
实体。当您在
角色的请求负载中传递主键时,它将创建/更新角色表

您需要从加入中删除
CascadeType.PERSIST
,它将按预期工作

@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH })
    @JoinTable(name = "user_has_role",
            joinColumns = {
                    @JoinColumn(name = "user_id", referencedColumnName = "user_id",
                            nullable = false, updatable = true)},
            inverseJoinColumns = {
                    @JoinColumn(name = "role_id", referencedColumnName = "role_id",
                            nullable = false, updatable = true)})
    @JsonIgnoreProperties(value = {"users"})
    private Set<Role> roles = new HashSet<>();
@manytomy(fetch=FetchType.LAZY,cascade={CascadeType.DETACH,CascadeType.MERGE,CascadeType.REFRESH})
@JoinTable(name=“user\u具有\u角色”,
joinColumns={
@JoinColumn(name=“user\u id”,referencedColumnName=“user\u id”,
nullable=false,updateable=true)},
反向连接列={
@JoinColumn(name=“role\u id”,referencedColumnName=“role\u id”,
nullable=false,updateable=true)})
@JsonIgnoreProperties(值={“用户”})
私有集角色=新HashSet();

您需要一个中间表。我有。。。它的用户有角色检查实体我想你需要使用
@PutMapping
方法来检查这个
@PutMapping
我现在就试试它不起作用了它还从角色表中删除了记录。。。这是唯一的问题,就像更新角色表并将name和description设置为null一样,因为在json主体中没有指定它们……我只是尝试了一下,遗憾的是更新角色表并将name和description设置为null仍然是同一个问题。。有什么想法吗?试着删除级联是的,我刚刚删除了所有级联值,它确实起作用了!!谢谢你一直救我!
@PostMapping("/addUser")
    public String addUser(@RequestBody User user) {
        userrepository.save(user);
        return "user saved with name: " + user.getName();
    }
{
        "userId" : 7,
        "name": "test",
        "lastname": "testlast",
        "email": "testtest@yahoo.com",
        "password": "test123",
        "lastActive": "04/05/21",
        "createdDate": "02/04/20",
        "institution": {
            "institutionId": 4
            },
       "roles": [
            {
                "roleId": 2
            }
        ],  
        "active": false,
        "blocked": true
    }
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH })
    @JoinTable(name = "user_has_role",
            joinColumns = {
                    @JoinColumn(name = "user_id", referencedColumnName = "user_id",
                            nullable = false, updatable = true)},
            inverseJoinColumns = {
                    @JoinColumn(name = "role_id", referencedColumnName = "role_id",
                            nullable = false, updatable = true)})
    @JsonIgnoreProperties(value = {"users"})
    private Set<Role> roles = new HashSet<>();