Como excluir automaticamente muitas associações para muitos (Cascade)
-
21-09-2019 - |
Pergunta
No meu banco de dados, tenho usuários e grupos de usuários que têm uma relação muitos para muitos. O usuário tem um conjunto de usergroup, o objeto de domínio do grupo de usuário não vê o usuário.
<class name="User" table="UserTable">
<set name="UserGroup" cascade="save-update" access="field.pascalcase-underscore" table="User2UserGroup">
<key column="User_Id" />
<many-to-many class="UserGroup" column="UserGroup_Id" />
</set>
...
O que estou tentando alcançar é o Nibernate excluir a correlação da tabela de junção quando excluo um usuário ou um grupo de usuários. Além disso, o usuário e o grupo são objetos filhos de, vamos chamá -lo de domínio. Domínio faz cascade="all-delete-orphans"
, então, quando um domínio é excluído, ele Desetam em cascata todos os seus usuários e grupos de usuários.
De volta à relação do grupo de usuário <->: se eu entendo corretamente, não posso usar nenhuma forma de cascata que envolva excluir, pois quero excluir a associação entre dois objetos e não o próprio objeto relacionado. (Um grupo não deve desaparecer, mesmo que seja órfão. E um usuário sem um grupo é uma coisa válida no meu mundo - ele apenas não tem direitos para fazer nada.)
Preciso olhar para eventos/interceptores? Ou posso fazer o que quero alcançar controlando o mapeamento?
Solução
Se você estiver usando um banco de dados que suporta, não poderá definir a cascata no próprio banco de dados na forma de uma restrição de chave estrangeira?