Странно, что у вас двунаправленная связь между клиентом и контактом, отображаемым таким образом.Если Клиент может быть связан с несколькими Контактами, и наоборот, у вас должно быть много ко многим с обеих сторон.Но у вас есть много к одному на контактной стороне.И вы упоминаете, что хотите каскадно удалять в Контакт.
Возможно, вам следует рассмотреть возможность сопоставления коллекций контактов как один-ко-многим ?Попробуйте это для сопоставления клиентов, обратите внимание, атрибут обратного .
<set name="Contacts"
table="CustomerContact"
inverse="true"
cascade="all-delete-orphan" >
<key column="Customer" />
<one-to-many class="Contact" />
</set>
С этим сопоставлением контактов:
<many-to-one name="Customer" column="Customer" />
Вам также придется «преследовать указатели»:исключить Customer.Contact при удалении соответствующего контакта из коллекции Customer.Contacts.