Hibernate Родитель / Детское отношение - PullRequest
0 голосов
/ 22 января 2012

Я хочу знать, почему, если у меня есть родительские и дочерние отношения и я хочу добавить дочерний элемент в родительский, недостаточно установить родительский элемент дочернего элемента и добавить дочерний элемент в родительский элемент.

Parent parent = new Parent();
Child child = new Child();
child.setParent(parent);

// Why the next line?
parent.getChild().add(child);

недостаточно для того, чтобы установить родителя дочернего элемента и пометить отношение «один ко многим» к обратному = «истина»?

Ответы [ 2 ]

1 голос
/ 22 января 2012

взгляните на это так-нить . Если в вашем отображении есть все, что нужно для спящего режима, достаточно просто установить родителя. Ответ в этой теме также объясняет, что все кэшированные объекты также не обновляются, и предлагает решение для этого.

0 голосов
/ 22 января 2012

Последняя строка не обязательна.Hibernate использует сторону владельца (в данном случае дочернюю), чтобы узнать, должна ли она сохранять связь.

Однако, это не заботит, инициализировали ли вы другую сторону, и не сделает это за вас.,Так, если этот метод возвращает родителя в графический интерфейс, например, графический интерфейс получит родителя без нового дочернего элемента в своем списке дочерних элементов.Точно так же, если этот фрагмент кода является лишь небольшой частью более длинной транзакции, остальная часть кода в транзакции не увидит нового дочернего элемента в списке дочерних элементов, поскольку вы не смогли поддерживать согласованность графа объектов.

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

...