如何在 ManyToMany 中插入数据 Rest Api

How to insert data in ManyToMany Rest Api

我找不到在 spring 引导中使用 ManyToMany 插入数据的方法。谁能建议我如何在 spring 启动和休眠中使用 M-To-M 保存数据。

下面是我的代码。

实体

@Entity
@Table(name = "user_master")
public class Users {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer user_id;

    private String name;

    @JsonManagedReference
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(name = "users_roles", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = {
            @JoinColumn(name = "role_id") })
    private Set<Roles> roles;

    // constructor and getter/setter
}

@Entity
@Table(name = "role_master")
public class Roles {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer role_id;

    private String name;

    @JsonBackReference
    @ManyToMany(cascade = CascadeType.ALL, mappedBy = "roles")
    private Set<Users> users;

    // constructor and getter/setter
}

服务

@Override
public Set<Users> addAddressPerson(Set<Users> users) {
    for(User user: users) {
        for(Roles roles: user.getRoles()) {
            roles.getUsers().add(user); // problem is in here
        }
    }
    return users.stream().map(userRepo::save).collect(Collectors.toSet());
}

邮递员[=3​​1=]

[
  {
    "name": "Michael",
    "roles": [
    {
        "name": "Project Manager"
    },
    {
        "name": "Software Developer"
    }
    ]
  }
]

错误

"message": "Cannot invoke "java.util.Set.add(Object)" because the return value of "com.rest.RestApiPojo.Entity.Roles.getUsers()" is null"

尝试

@Override
public Set<Users> addAddressPerson(List<Users> users) {
    for(User user: users) {
        for(Roles roles: user.getRoles()) {
            roles.getUsers().add(user);
        }
    }
    return users.stream().map(UserRepo::save).collect(Collectors.toSet());
}

@Entity
@Table(name = "user_master")
public class Users {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer user_id;

    private String name;

    @JsonManagedReference
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(name = "users_roles", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = {
            @JoinColumn(name = "role_id") })
    private Set<Roles> roles = new HashSet<>();

    // constructor and getter/setter
}

@Entity
@Table(name = "role_master")
public class Roles {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer role_id;

    private String name;

    @JsonBackReference
    @ManyToMany(cascade = CascadeType.ALL, mappedBy = "roles")
    private Set<Users> users = new HashSet<>();

    // constructor and getter/setter
}