如何解决Spring boot JPA - 用控制器中的额外列更新多对多关系的中间表的最佳解决方案是什么?
我在我的项目中使用 Spring Boot 作为后端。在数据库 (MysqL) 中,我有一个多对多关系,其中包含下一个实体:User、interest 和 relUserInterest。 RelUserInterest 是 User 和 Interest 之间的中间表,有额外的列。
用户实体
@Entity
public class User {
@Id @GeneratedValue private Long id;
@NotNull
@Column (unique = true) private String email;
@OnetoMany(mappedBy = "user",cascade = CascadeType.ALL)
@NotNull
Set<RelUserInterest> priority = new HashSet<>();
// more attributes,constructor,get and set
}
兴趣实体
@Entity
public class Interest {
@Id
@GeneratedValue
private long id;
@NotEmpty
@Column(unique = true)
private String nameInterest;
@OnetoMany(mappedBy = "interest",get and set
}
RelUserInterest 实体
@Entity
@Table(name = "rel_user_interest")
@IdClass(UserInterestId.class)
public class RelUserInterest implements Serializable {
@Id
@ManyToOne
@JoinColumn(name = "user_id",referencedColumnName = "id")
User user;
@Id
@ManyToOne
@JoinColumn(name = "interest_id",referencedColumnName = "id")
Interest interest;
int priority;
// constructor,get and set
}
到目前为止一切顺利。我想更新用户和他们的兴趣。我的控制器是这个。我想做的是当我更新现有用户时,更新中间表(RelUserInterest)。
@PutMapping("/update/{id}")
public ResponseEntity<?> updateUser(@Validated @RequestBody UserDTOUpdate userDTOUpdate,BindingResult result,@PathVariable Long id) {
// More code
User user = useRSService.getUserById(id);
// Code updating other attributes
// Here this the problem --> I don't kNow how to update the attribute priority of RelUserInterest
useRSService.updateUser(user);
return new ResponseEntity<>(new Mensaje("Usuario actualizado"),HttpStatus.CREATED);
}
我找到了几个链接,但我不确定哪个是最好的解决方案,也不知道如何使用我的代码。
- How to update ManyToMany with extra columns
- Spring boot JPA many to many with extra column insert and update issue
- Spring-Data-JPA ManyToMany relationship with extra column
在邮递员中,我想发送下一个 JSON,尽管如果解决方案需要,兴趣数组可能会有所不同:
{
"age": 22,"genre": "Male","userName": "Miguel","roles": [
"ROLE_ADMIN","ROLE_USER"
],"interest": [
{
"interestID": 1,"nameInterest": "Museum","priority": 9
}
]
}
问题
那么,问题是:如何更新 RelUserEntity 表的属性优先级?我认为制作中间表存储库是一个错误。我有点失落。我希望你能帮助我。谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。