Java 多对多关系springboot mysql
我有两个模型用户和角色,这是一个多对多关系。 我需要添加一个用户,并给他一个已经存在于我的数据库中的特定角色。 ------使用者------ 这是我随api请求发送的json正文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
{
"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<>();