Я пытался разобраться с обратным атрибутом Hibernate, и, похоже, это одна из тех вещей, которые концептуально сложно.
Суть, которую я понимаю, заключается в том, что когда у вас есть родительский объект (например, Parent), который имеет коллекцию дочерних объектов с использованием сопоставления один-ко-многим, установка inverse = true в сопоставлении сообщает Hibernate, что «другая сторона (Дочерний) несет ответственность за обновление, чтобы поддерживать ссылку на внешний ключ в своей таблице».
Это дает два преимущества, когда речь идет о добавлении дочерних элементов в коллекцию в вашем коде и последующем сохранении родительского элемента (с каскадным набором всех элементов): вы сохраняете ненужное попадание в базу данных (потому что без обратного набора Hibernate считает, что у него есть два места для обновления отношения FK), и согласно официальной документации:
Если столбец ассоциации объявлен как NOT NULL, NHibernate может вызвать нарушение ограничений при создании или обновлении ассоциации. Чтобы предотвратить эту проблему, вы должны использовать двунаправленную связь с многозначным концом (набором или сумкой), помеченным как inverse = "true".
Пока все это имеет смысл. Чего я не понимаю: когда вы НЕ захотите использовать inverse = true в отношении "один ко многим"?