【发布时间】:2017-07-30 17:37:06
【问题描述】:
我有两个类,第一个是“聚合器/所有者/任何”类:
@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;
这里是“聚合”:
@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 关系列 所以,我的工作区正在失去它的项目参考,我不知道我做错了什么
【问题讨论】:
-
因为你没有引用你如何关联你传递给 em.persist 的对象,所以没有人能说太多。
-
@NeilStockton 这是因为我没有做任何明确的事情,我在我的控制器对象中收到了带有其工作区的 Project 对象,而我没有做任何其他事情。我需要做更多的事情吗?
-
我不知道什么是“没有明确的”。您有一个 1-N BIDIRECTIONAL 关系,因此您必须在调用 persist 之前设置关系的两侧。你这样做了吗?因为不显示该代码意味着我们不知道
-
@Akash 我已经在我的项目类上映射了工作区,在我的工作区类中我有一个 ManyToOne 注释,不允许使用 mappedBy 属性......但也许我没有得到你的点,我明白了吗?
标签: java hibernate jpa foreign-keys relationship