В двунаправленных ассоциациях спецификация JPA определяется таким образом, что реализация просматривает ассоциативную сторону ассоциации, только когда она хочет увидеть текущее «состояние» ассоциации, чтобы определить, что необходимо сохранить, и каждая двунаправленная ассоциация имеетвладеющая и обратная сторона.Это может избежать двусмысленностей (то есть, что нужно сохранить, если обе стороны ассоциации не согласованы?), А также дать возможности для оптимизации и более простых реализаций в реализациях JPA.Обратите внимание, что это, как правило, не является проблемой, поскольку двунаправленные ассоциации должны поддерживаться вами, а не JPA.Когда вы всегда правильно поддерживаете двунаправленные ассоциации в своем приложении (обновляя обе стороны и сохраняя их согласованными), проблем не возникает.
OneToMany с mappedBy является обратной стороной, поэтому имплан JPA не смотрит на эту сторону, когдаопределение состояния ассоциации при очистке / фиксации транзакции.Он только смотрит на A.getB () и имеет значение null, поэтому для JPA ассоциация равна нулю.
OneToMany без mappedBy, то есть становится стороной-владельцем, поддерживается только с JPA 2.0, но я думаю, что Hibernateподдерживает это с возрастов.Вот почему ваш пример работает, если вы удалите mappedBy из OneToMany.В этом случае OneToMany становится стороной-владельцем, и, следовательно, реализация «смотрит» на эту сторону, чтобы определить, что следует сохранить.Это не меняет того факта, что ваша ассоциация в памяти все еще неполная.Вы должны установить обе стороны.
ОБНОВЛЕНИЕ: Я не знаю точно, что делает Hibernate, когда вы отключаете mappedBy с любой стороны, но я думаю, что это может привести к менее оптимальному SQL.См. Также: http://simoes.org/docs/hibernate-2.1/155.html, в частности, раздел об "обратном =" ложном "".«обратный» - это родной термин Hibernate для JPA «mappedBy».Таким образом, inverse = "true" в отображении Hibernate аналогично использованию mappedBy = "other" в отображении JPA, оба помечают эту сторону как обратную сторону, которая игнорируется при определении обновлений ассоциации.