与SpringData保持一致时,Hibernate未设置子外键

时间:2018-10-23 19:51:34

标签: java spring hibernate spring-data

嗨!

我已经尝试了所有解决方案并阅读了每个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?

1 个答案:

答案 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);
    });
  }