私のマッピング(それほど罪のない人を保護するために編集され、唖然としました):
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="MyAssembly, Culture=neutral"
namespace="MyAssembly" auto-import="false">
<class name="Customer" table="Customers">
<id name="Id" access="nosetter.camelcase-underscore" >
<generator class="assigned"/>
</id>
<property name="blah"/>
...
<property name="bleh"/>
<join table="Addresses" optional="true">
<key column="Id"/>
<component name="Address" class="MyAssembly.Address, MyAssembly, Culture=neutral" access="field.camelcase-underscore">
<property name="Street" />
<property name="Number" />
</component>
</join>
</class>
</hibernate-mapping>
私がこれをするとき:
Address dir = new Address();
dir.Street = "Foo";
dir.Number = 27;
//// Previously loaded customer
cli.Address = dir;
//// Save repository, commit transaction
これは正常に機能し、新しいアドレスをアドレステーブルに自動的に挿入します。しかし、アドレスを削除したい場合:
//// Previously loaded customer with attached address
cli.Address = null;
//// Save repository, commit transaction
つまり、Addressesテーブルから行を削除する代わりに、NHibernateは行を更新し、Idを除くすべてのフィールドをnullに設定します。
私のマッピングの何が問題になっていますか?