У меня возникли проблемы с отношениями родитель-ребенок. Когда я упорствую со стороны коллекции (дочерняя сторона), я получаю 2 новых детей вместо одного.hibernate двунаправленные одноразовые вставки дубликатов
Здесь есть являются Hibernate отображения:
<set name="children" inverse="true"
cascade="all,delete-orphan" lazy="true"
order-by="CHILD_ID desc">
<key column="PARENT_ID" />
<one-to-many class="com.mycompany.Child" />
</set>
<many-to-one name="parent" class="com.mycompany.Parent" not-null="true">
<column name="PARENT_ID" />
</many-to-one>
Вот код Java используется для добавления ребенка в двунаправленной связи:
// Persist logic...
Parent p = myParentService.findById(1);
Child c = new Child();
p.addChild(c);
myChildService.persist(child);
// Inside the parent class...
public void addChild(Child child)
{
if (this.children == null)
this.children = new LinkedHashSet<Child>();
this.children.add(child);
child.setParent(this);
}
Если я удалить «this.children.add (ребенок);» часть работает так, как ожидалось. Это сбивает с толку, потому что документ Hibernate here говорит, что двунаправленные отношения должны работать таким образом. Что мне не хватает?
is setParent также добавляет ребенка? –
Нет, setParent просто выполняет простое назначение. – user333903
Способ управления двунаправленной ассоциацией является правильным, вам нужно установить обе стороны ссылки. Но что вы имеете в виду именно * Я получаю 2 новых детей *? Где? В базе данных? В сборнике? И то и другое? Как вы реализовали 'equals' /' hashCode'? Используете ли вы 'id' в своей реализации? Вы действительно можете это показать? –