Попробуйте:
<map name="Urls" lazy="true" cascade="all-delete-orphans">
- Вам не нужно
table
, потому что таблица определена в классе UserUrl
mapping - Вы не должны делать этонаоборот, если это не
- Вы должны каскадировать все это - удалить-сироту, чтобы сказать NH, чтобы удалить элементы, которые удалены из коллекции.
Не относится к вашемувопросы, почему у вас это в URL?
<property name="user_id" column="user_id" type="Int32" not-null="true"/>
Вы отображаете там внешний ключ!Я бы никогда не осмелился сделать это.
На самом деле, я не уверен, стоит ли вам отображать это так:
<map name="Urls" table="UserUrl" lazy="true" cascade="all-delete-orphans">
<key column="user_id"/>
<index column="url_type_id" type="Int32"/>
<composite-element>
<property name="UrlType" column="url_type_id" type="Int32" not-null="true"/>
<property name="Url" column="url" type="String" not-null="true"/>
</composite-element>
</map>
Если URL-адрес не являетсянезависимая сущность, имеющая собственный идентификатор, тогда вы можете отобразить его как составной элемент.URL обрабатывается как тип значения.Больше нет отображения классов UserUrl
.
Редактировать:
- См. Справочную главу NH 7 , в которой объясняются компоненты.
- Если у вас возникают проблемы со значениями, не равными NULL, просто удалите ограничение не-NULL для внешнего ключа.NH должен вставить несколько столбцов, чтобы получить первичные ключи, если вы используете
generator class="identity"
, поэтому он хранит временный ноль.