java - 保存对象后外键为空
问题描述
我有以下关系Citizen
:
@Entity
@Table(name = "citizens")
public class Citizen {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Size(max = 10, min = 10, message = "CPR must be exactly 10 characters")
private String cpr;
@OneToMany(mappedBy = "citizen", cascade = CascadeType.ALL, orphanRemoval = true)
private List<WeeklyCare> weeklyCare;
}
和WeeklyCare
:
@Entity
public class WeeklyCare {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "citizen_id")
private Citizen citizen;
}
我有一个 REST API,它接收Citizen
每个列表的列表WeeklyCare
并保存它们:
@Autowired
private CitizenRepository citizenRepository;
@CrossOrigin(origins = "http://localhost:4200")
@PostMapping(path = "/add") // Map ONLY GET Requests
@Secured({"ROLE_ADMIN", "ROLE_DATAMANAGER"})
public ResponseEntity addNewCitizens(
@RequestBody List<Citizen> citizens) {
citizenRepository.saveAll(citizens);
return new ResponseEntity(new ApiResponse(true, "Filen er blevet indlæst", "CITIZENS_SAVED"), HttpStatus.OK);
}
在此之后,当我查看weekly_care
数据库中的表时,所有行的列上都为空citizen_id
。我错过了什么?
解决方案
这是一个常见的场景,Hibernate
并且是由于未设置关系的倒数造成的:
Citizen c = new Citizen();
WeeklyCare w = new WeeklyCare();
c.getWeeklyCare().add(w);
//The missing link:
w.setCitizen(c);
citizenRepository.save(c);
我不确定这是如何在您的网络服务请求中配置的......
推荐阅读
- image - Divide an image into non-overlapping blocks and applying the 2D DWT on each block
- javascript - 获取下的hrefs
- 从
- 使用 Cheerio
- 从
- reactjs - 为什么在 Router.push('url') call 之后 req 未定义。(未处理的拒绝(TypeError):无法读取未定义的属性“标题”。)
- python - 用零初始化字典
- r - R中使用预测函数的线性回归
- python - Dataframes 的减法和赋值返回 NA
- bash - bash:将所有参数视为单个字符串参数
- ruby-on-rails - Rake db:使用错误未定义方法`session_store_host`迁移rails
- python - 如何修复“TypeError:字节类型的对象不是 JSON 可序列化的”
- javascript - javascript while循环正确迭代但具有相同逻辑的for循环不是,在具有整数值和一些空值的数组上