I have a object Customer, this object has an ISet list of Contact. When I delete a Customer I’d like to delete the Contact.
I use the mapping below, I tried all option in cascade but still have this problem :
The DELETE statement conflicted with the REFERENCE constraint “FK4FF8F4B29499D0A4”. The conflict occurred in database “MyDB”, table “dbo.Contact”, column ‘Customer’.
The mapping Customer
<set name="Contacts" table="CustomerContact" cascade="save-update">
<key column="Customer" />
<many-to-many class="Contact" column="Contact" />
</set>
The mapping Contact
<many-to-one name="Customer" column="Customer" not-null="true" />
It is strange that you have bidirectional association between customer and contact mapped like that. If Customer can be associated with multiple Contacts, and vice versa, you should have many-to-many on both sides. But you have many-to-one at Contact side. And you mention that you want to cascade deletes to Contact.
Perhaps you should consider mapping Contacts collections as one-to-many? Try this for Customer mapping, note inverse attribute.
With this Contact mapping:
You will also have to ‘chase the pointers’: null out Customer.Contact when corresponding Contact is removed from Customer.Contacts collection.