嗨!
我已经尝试了所有解决方案并阅读了每个stackoverflow帖子,但是找不到解决我问题的方法。我将Spring Boot与SpringData一起使用,DB是Oracle 11。
我父母中有一个OneToMany关系
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@GenericGenerator(name = "sequenceGenerator", strategy = "uuid2")
@Column (name = "uuid", nullable = false)
private UUID uuid;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent", cascade = CascadeType.ALL)
private List<Children> children;
和孩子
@ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.PERSIST)
@JoinColumn(name = "parent_uuid", referencedColumnName = "uuid", nullable = false, updatable = false)
private Parent parent;
在DB raw(16)中,外键的类型为UUID
当我尝试使用来保存父项时
Parent entity = parentRepository.save(parent);
结果是未设置将其与父级关联的子级中的外键,它保持为空。我添加了很多不必要的批注参数,希望可以解决该问题。我开始认为可能是Hibernate不喜欢UUID?
答案 0 :(得分:0)
阅读休眠文档后,我发现应该手动将孩子设置为父母。
我在父级中重写了setter方法,如下所示。我曾经尝试过一次,但是后来做错了。此解决方案工作正常。我还发现了另一个stackoverflow帖子,其中提到了此解决方案。
public void setChildren(List<Child> children) {
if (CollectionUtils.isEmpty(this.children)) {
this.children = new ArrayList<>();
}
children.forEach(child -> {
group.setParent(this);
this.children.add(group);
});
}