Hibernate - удаление предмета из коллекции - PullRequest
4 голосов
/ 19 сентября 2011

Я хотел уточнить сделанное мной предположение относительно функциональности Hibernate. Предположим, у меня есть класс A с отображением @OneToMany с B. Каждый из этих B имеет родительскую ссылку A для поддержки атрибута mappedBy на A.

Когда я удаляю B из коллекции в A, может ли hibernate автоматически обнулять родительское поле внутри B ?. Из всех проведенных мною тестов при удалении чего-либо из коллекции он фактически не обновляет базу данных путем изменения родительской ссылки в дочернем элементе.

Эта ссылка , кажется, поддерживает мое утверждение, поскольку они вручную обнуляют родительскую ссылку, а также удаляют ее из родительской Set.

1 Ответ

6 голосов
/ 19 сентября 2011

Всякий раз, когда сопоставление сопоставляется с обоих концов, один из этих концов обозначается как активный, а другой - как пассивный.(Пассивный конец - это тот, который отображается с помощью mappedBy= или inverse="true")

Hibernate не обновляет и не может обновить пассивный конец коллекции при изменении активного конца, так как он может обнаружить такойизменяется только во время промывки.Следовательно, считается хорошей практикой вызывать код для изменения обоих концов ассоциации, чтобы гарантировать, что объектная модель всегда находится в согласованном состоянии.

Самому Hibernate не важно, согласованы ли два конца ассоциации, поскольку он смотрит только на активный конец при сбросе в базу данных.

При отображении связи один ко многимконец один-ко-многим должен быть обозначен как пассивный.В разделе руководства по гибернации, на который вы ссылаетесь, делается попытка объяснить, почему.

...