我有两个类,第一个是"聚合器/所有者/无论什么"类:
@Entity
@Table(name = "project")
public class Project {
@Id
@GeneratedValue
private Long id;
@OneToMany(mappedBy = "project", cascade = CascadeType.PERSIST, fetch =
FetchType.EAGER)
private List<Workspace> workspaces;
这里&#34;聚合&#34;:
@Entity
@Table(name = "workspace")
public class Workspace {
@Id
@GeneratedValue()
private Long id;
@ManyToOne()
@JoinColumn(name = "id_project", referencedColumnName = "id", foreignKey = @ForeignKey)
private Project project;
这里有一些我想要保留的示例结构:
Project
{
description:"SOMETHING",
id:null,
name:"Project Name",
workspaces:[{id: null, name: "Somenthing", description: "Workspace Name", }]
}
我在这里收到:
@RestController
@RequestMapping("projectRest")
public class ProjectRestController {
@PostMapping("/create")
public ResponseEntity<String> create(@RequestBody Project project) {
try {
service.insert(project);
return new ResponseEntity<>("OK", HttpStatus.OK);
} catch (Exception ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
我没有改变任何东西,直到我在这样的课程中保存:
public void save(Project model) throws RuntimeException {
this.getSession().persist(model);
}
除了工作区表上的id_project关系列之外,它在我的数据库中保存了我想要的所有内容 所以,我的工作区正在失去项目参考,我不知道我做错了什么
答案 0 :(得分:1)
是的,这是预期的,你有一个双向关系,要求关系的每个部分都有一个对其他部分的引用,你的项目在其中有一个工作区,但反之则不然。
要解决此问题,要么使用单向关系,要么检索工作区对象并在其中设置项目
public void save(Project model) throws RuntimeException {
Workspace workspace = model.getWorkSpace();
workspace.setProject(model);
this.getSession().persist(model);
}