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