Hibernate RESTAPI:如果从JSON中删除,会破坏关系吗?
我正在使用Spring数据JPA/hibernate/Spring Boot构建一个API。 假设我有一个JSON请求:GET/Parents/1Hibernate RESTAPI:如果从JSON中删除,会破坏关系吗?,hibernate,rest,api,spring-data-jpa,spring-rest,Hibernate,Rest,Api,Spring Data Jpa,Spring Rest,我正在使用Spring数据JPA/hibernate/Spring Boot构建一个API。 假设我有一个JSON请求:GET/Parents/1 { "id": 1, "name": "Dad", "adoptedChildren": [ { "id": 1, "name": "Marie", "age": 10 }, { "id": 1, "name": "Robert",
{
"id": 1,
"name": "Dad",
"adoptedChildren": [
{
"id": 1,
"name": "Marie",
"age": 10
},
{
"id": 1,
"name": "Robert",
"age": 9
}
]
}
这只是一个有两个领养孩子的父母。
现在,不管出于什么原因,这个家长失去了一个孩子,所以我收到了这个PUT请求:PUT/Parents/1
{
"id": 1,
"name": "Dad",
"adoptedChildren": [
{
"id": 1,
"name": "Robert",
"age": 9
}
]
}
JSON缺少一个子元素
我有两个问题:
@PutMapping("parents/{id}")
public ItineraryDTO updateItinerary(@PathVariable int id,
@RequestBody Parent parent){
return parentRepository.save(parent);
}
在我看来,这一切都取决于你的模型 1) 如果您的“子对象”是依赖实体,并且没有自己的存储库,那么您的选择是#1。但是在这种情况下,当您将保存一个包含嵌套子实体的父实体时,您应该更正父类,使其正常工作:
@Entity
public class Parent {
//...
@OneToMany(cascade = ALL, orphanRemoval = true)
private List<Child> children;
//...
}
另外,这只是一个示意图模型——在实际项目中,您应该将实体保存在服务层中
@Entity
public class Parent {
//...
@OneToMany(mappedBy = "parent")
private List<Child> children;
//...
}
@Entity
public class Child {
//...
@ManyToOne
private Parent parent;
//...
public Child removeParent() {
parent = null;
return this;
}
}
@PutMapping("/childrent/{childId}/remove_parent")
public ResponseEntity removeParent(@PathVariable("childId") Long childId) {
return childRepo.findById(childId)
.map(c -> ResponseEntity.ok(childRepo.save(c.removeParent())))
.orElse(ResponseEntity.notFound().build())
}