gpt4 book ai didi

java - JPA:外部 ID 不会自动设置

转载 作者:行者123 更新时间:2023-11-30 06:34:40 26 4
gpt4 key购买 nike

我有两个类,第一个是“聚合器/所有者/其他”类:

@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 关系列因此,我的工作区正在丢失其项目引用,我不知道我做错了什么

最佳答案

是的,这是预期的,您有一个双向关系,要求关系的每个部分都引用另一部分,您的项目内部有一个工作区,但反之则不然。

要解决此问题,您可以使用单向关系,也可以检索工作区对象并在其中设置项目

public void save(Project model) throws RuntimeException {
Workspace workspace = model.getWorkSpace();
workspace.setProject(model);
this.getSession().persist(model);
}

关于java - JPA:外部 ID 不会自动设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45402754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com