Многие Многим удаляют каскад в NHibernate

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
14
задан Marijn 27 January 2012 в 08:51
поделиться

4 ответа

Так как я искал этот ответ и нашел этот поток на Google (без ответа), я полагал, что отправлю свое решение этого. С тремя таблицами: Роль, RolesToAccess (ManyToMany), Доступ.

Создают следующие отображения: Доступ:

<bag name="Roles" table="RolesToAccess" cascade="none" lazy="false">
      <key column="AccessId" />
      <many-to-many column="AccessId" class="Domain.Compound,Domain" />
    </bag>

<bag name="RolesToAccess" cascade="save-update" inverse="true" lazy="false">
      <key column="AccessId" on-delete="cascade" />
      <one-to-many class="Domain.RolesToAccess,Domain" />
    </bag>

Роли:

<bag name="Accesses" table="RolesToAccess" cascade="none" lazy="false">
      <key column="RoleId" />
      <many-to-many column="RoleId" class="Domain.Compound,Domain" />
    </bag>

<bag name="RolesToAccess" cascade="save-update" inverse="true" lazy="false">
      <key column="RoleId" on-delete="cascade" />
      <one-to-many class="Domain.RolesToAccess,Domain" />
    </bag>

, Как упомянуто выше Вас может сделать свойства RolesToAccess защищенными, таким образом, они не загрязняют Вашу модель.

8
ответ дан 1 December 2019 в 15:22
поделиться

Вы могли сделать отображение для таблицы ассоциации, и затем звонить, удаляют на той таблице, где Role_id является значением, Вы собираетесь удалить, и затем выполнить удаление самой роли. Должно быть довольно простым, чтобы сделать это.

0
ответ дан 1 December 2019 в 15:22
поделиться

Хотя я полагаю, что NHibernate должен позволить делать это, не имея набора в ролях класс C#, можно всегда устанавливать это поведение в SQL. Выберите на каскадном удалении для FK в базе данных, и это должно быть автоматически, просто не упустить кэш NHIB.

, Но я сильно совет Вы для использования этого в качестве последнего ресурса.

0
ответ дан 1 December 2019 в 15:22
поделиться

Необходимо создать отображение от Роли до Artifact.

можно сделать его ленивой загрузкой и отобразить его на защищенного виртуального участника, так, чтобы к этому никогда на самом деле получили доступ, но Вам нужно то отображение там для NHibernate, чтобы знать, что это должно удалить роли из ArtefactAccess таблица

0
ответ дан 1 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: