У меня есть два класса, назовите их Обезьяна и Банан, с двунаправленными отношениями один-ко-многим
Monkey monkey = new Monkey();
Banana banana = new Banana();
monkey.Bananas.Add(banana);
banana.Monkey = monkey;
hibernateService.Save(banana);
Когда я запускаю этот кусок кода, я хочу, чтобы и обезьяна, и банан сохранялись. Тем не менее, он сохраняется только тогда, когда я явно сохраняю обезьяну, а не наоборот. Первоначально это имело смысл, поскольку только мой Monkey.hbm.xml имел отображение с cascade="all"
.
<set name="Bananas" inverse="true" cascade="all">
<key column="Id"/>
<one-to-many class="Banana"/>
</set>
Я подумал, что мне просто нужно добавить следующее в мой файл Banana.hbm.xml:
<many-to-one name="Monkey" column="Id" cascade="all" />
К сожалению, это привело к ошибке Parameter index is out of range
, когда я попытался запустить фрагмент кода. Я исследовал эту ошибку и нашел этот пост , но я все еще не вижу, что я делаю неправильно. Насколько я могу судить, отношения отображаются по одному разу на каждой стороне. Для полного раскрытия вот два файла сопоставления:
Monkey.hbm.xml
<class name="Monkey" table="monkies" lazy="true">
<id name="Id">
<generator class="increment" />
</id>
<property name="Name" />
<set name="Bananas" inverse="true" cascade="all">
<key column="Id"/>
<one-to-many class="Banana"/>
</set>
</class>
Banana.hbm.xml
<class name="Banana" table="bananas" lazy="true">
<id name="Id">
<generator class="increment" />
</id>
<property name="Name" />
<many-to-one name="Monkey" column="Id" cascade="all" />
</class>