Работая с Hibernate, вы несете ответственность за поддержание согласованного состояния обеих сторон двунаправленных отношений. Более того, при сохранении отношений Hibernate смотрит на сторону-владельца (сторону без mappedBy
), поэтому ваш код не будет правильным даже без optional=false
.
Вы можете использовать следующий подход для обеспечения согласованности:
class Parent {
...
public void addChild(Child c) {
children.add(c);
c.setParent(this);
}
}
public Parent parentService(List<Child> childList) {
...
for (Child c: childList) {
parent.addChild(c);
}
...
}
В этом случае видимость setChildren()
может быть ограничена во избежание ошибочных вызовов.
Кроме того, выглядит странным, что у вас нет каскадирования и не сохраняются дочерние элементы в одной транзакции с родительским.