【发布时间】:2020-04-04 07:39:57
【问题描述】:
假设我正在更新与帖子具有一对多关系的用户实体
这是更新代码
public User updateUser(Long userid, Userdto userdto) {
User user = findByTemplatesFooterNo(userid);
User mappedUser = modelmapper.map(UserDto, User.class);
user.setName(mappedUser.getName());
user.setAge(mappedUser.getAge());
user.getPosts().clear();
user.getPosts().addAll(mappedUser.getPost());
userrepository.save(user);
}
这是用户的当前数据
{
"user_id" : 1,
"name" : "testname",
"age" : "testage",
"posts" : [
{
"post_id" : 1,
"title" : "titlepost",
"content" : "content"
},
{
"post_id" : 2,
"title" : "titlepost",
"content" : "content"
},
]
}
这是我传递的请求正文以更新 ID 为 1 的用户
{
"name" : "testname",
"age" : "testage",
"posts" : [
{
"title" : "titlepost",
"content" : "content"
}
]
}
我可以成功更新用户并且响应是
{
"user_id" : 1,
"name" : "testname",
"age" : "testage",
"posts" : [
{
"post_id" : 3,
"title" : "titlepost",
"content" : "content"
}
]
}
它取代了所有当前的帖子。我想要的只是附加新的,以便响应变为
{
"user_id" : 1,
"name" : "testname",
"age" : "testage",
"posts" : [
{
"post_id" : 1,
"title" : "titlepost",
"content" : "content"
},
{
"post_id" : 2,
"title" : "titlepost",
"content" : "content"
},
{
"post_id" : 3,
"title" : "titlepost",
"content" : "content"
},
]
}
用户实体
@OneToMany(
cascade = CascadeType.ALL,
orphanRemoval = true,
fetch = FetchType.LAZY
)
@JoinColumn(
name = "user_id",
foreignKey = @ForeignKey(name = "fk_post_id"),
referencedColumnName = "userId"
)
private List<Post> post = new ArrayList<>();
【问题讨论】:
-
您需要通过 id (1) 获取用户,比较并保存整个对象
-
比较是什么意思?我通过 id 1 获取用户
-
正确,按 ID 获取用户以获取现有帖子。将现有帖子与收到的帖子进行比较。如果传入的帖子是新的(比较可能说不存在),则将其附加到现有的 List
并再次保存整个用户对象 -
有什么例子可以开始吗?
标签: java spring-boot jpa spring-data-jpa