Hibernate не устанавливает дочерний внешний ключ при сохранении с SpringData - PullRequest
0 голосов
/ 23 октября 2018

Hy!

Я перепробовал каждое решение и прочитал каждое сообщение от stackoverflow, но не могу найти решение своей проблемы.Я использую Spring boot с SpringData, БД - 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;

внешние ключи имеют тип UUID, в DB raw (16)

Когда я пытаюсь сохранить Родителя, используя

Parent entity = parentRepository.save(parent);

, в результате получается, что внешний ключ в дочернем элементе, который связывает его сРодитель не установлен, он остается пустым.Я добавил много ненужных аннотаций, надеясь, что это что-то исправит.Я начинаю думать, что, может быть, Hibernate не любит UUID?

1 Ответ

0 голосов
/ 26 октября 2018

Прочитав документацию по hibernate, я обнаружил, что должен вручную установить дочерние элементы в моем родителе.

Я переписал свой метод установки в parent следующим образом.Я пробовал это раньше, но потом сделал что-то не так.Это решение отлично работает.Я также нашел еще одну публикацию 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);
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...