У Ayende есть отличный пример использования <any>
mapping здесь , который я репостирую как часть моего вопроса, так как комментарии к этому сообщению в блоге закрыты.Учитывая его оригинальное сопоставление:
<class name="Order" table="Orders">
<id name="Id">
<generator class="native"/>
</id>
<any name="Payment" id-type="System.Int64" meta-type="System.String" cascade="all">
<meta-value value="CreditCard" class="CreditCardPayment"/>
<meta-value value="Wire" class="WirePayment"/>
<column name="PaymentType"/>
<column name="PaymentId"/>
</any>
</class>
<class name="CreditCardPayment" table="CreditCardPayments">
<id name="Id">
<generator class="native"/>
</id>
<property name="IsSuccessful"/>
<property name="Amount"/>
<property name="CardNumber"/>
</class>
<class name="WirePayment" table="WirePayments">
<id name="Id">
<generator class="native"/>
</id>
<property name="IsSuccessful"/>
<property name="Amount"/>
<property name="BankAccountNumber"/>
</class>
... как бы я мог сопоставить свойство с именем Order в классах CreditCardPayment и WirePayment, которое было бы «оборотной стороной» ассоциации, позволяющей обойти эти платежи обратнодо ордера, с которым они связаны?
Я понял здесь, что у CreditCardPayment и WirePayment могут потенциально быть одинаковые идентификаторы, поскольку они находятся в разных таблицах, поэтому мне нужно как-то сказать NHibernate, чтобы он использовал PaymentTypeво внимание.