私は2つのクラスを持っています。モンキーとバナナは1対多の双方向関係です。NHibernateでのカスケードの使用
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
エラーが発生しました。私はこのエラーを調査し、this postを見つけましたが、私はまだ間違っているのか分かりません。私は、私が知る限り、両側に一度マッピングされた関係を持っています。完全な情報開示のために、ここでは2つのマッピングファイルは、次のとおりです。
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>
あなたが言ったことは理にかなっていますが、Banana.hbmからカスケード属性を削除した後でも、パラメータインデックスが範囲外です。 –