Spring JPA - один ко многим - перевоспитание - PullRequest
0 голосов
/ 06 января 2019

У меня есть несколько сущностей в отношениях one-to-many.

Родитель:

@Entity
@Cacheable(false)
@Table(name="form_area")
public class FormArea {

  @OneToMany(fetch = FetchType.LAZY, mappedBy="formArea", cascade = { CascadeType.MERGE, CascadeType.PERSIST }) 
  private List<AssignableArea> assignableAreas = new ArrayList<AssignableArea>();

  ...
}

Ребенок:

@Entity
@Cacheable(false)
@Table(name="assignable_area")
public class AssignableArea {
  private @ManyToOne FormArea formArea;
  ...
}

Дочерний объект, AssignableArea, также имеет метод getter / setter для родительского объекта FormArea.

Когда я пере-родитель использую setFormArea(), это кажется успешным, поскольку база данных содержит правильную информацию. Но когда я звоню getAssignableAreas() в FormArea:

public List<AssignableArea> getAssignableAreas() {
  return Collections.unmodifiableList(new ArrayList<>(assignableAreas));
}

Я вижу старый список, до переучивания. Почему я вижу старый устаревший список, когда ожидаю увидеть обновленный список?

1 Ответ

0 голосов
/ 06 января 2019

Наиболее вероятная причина в том, что вы уже загрузили FormArea и его список assignableAreas, и вы обновили только одну сторону ассоциации, поэтому другая сторона остается такой же, как она была загружена: вы несете ответственность за поддерживать обе стороны ассоциации, если это имеет значение для вас.

Если вы начнете новую транзакцию и перезагрузите FormArea, ее список будет содержать правильные элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...