Несмотря на принятый ответ с высоким рейтингом, у меня есть другой ответ на этот вопрос.
Рассмотрим диаграмму классов с этими отношениями:
Parent => list of Items
Item => Parent
Никто никогда не говорил, что отношение Item => Parent является избыточным для отношения Parent => Items. Предмет может ссылаться на любого Родителя.
Но в вашем приложении вы знаете, что отношения избыточны . Вы знаете, что отношения не должны храниться отдельно в базе данных. Таким образом, вы решаете сохранить его в одном внешнем ключе , указывающем от Предмета на Родителя. Этой минимальной информации достаточно для составления списка и обратной ссылки.
Все, что вам нужно сделать, чтобы сопоставить это с NH, это:
- использовать один и тот же внешний ключ для обоих отношений
- сообщить NH, что один (список) является избыточным для другого и может игнорироваться при хранении объекта. (Это то, что NH на самом деле делает с
inverse="true"
)
Это мысли, которые имеют отношение к обратному. Ничего больше. Это не выбор, есть только один способ правильного отображения.
Проблема шпиона :
Это совершенно другое обсуждение , если вы хотите поддержать ссылку из Предмета на Родителя. Это зависит от вашей бизнес-модели, NH не принимает никаких решений в этом. Если одно из отношений отсутствует, то, конечно, нет избыточности и нет использования обратного.
Неправильное использование: Если вы используете inverse = "true" в списке, который не имеет избыточности в памяти, он просто не сохраняется. Если вы не укажете inverse = "true", если оно должно быть там, NH может сохранить избыточную информацию дважды.