가능한 한 단순화하려고 시도한 시스템에 시나리오가 있습니다. 우리는 테이블을 가지고 (인공 지능이라고 부름) 인공물을 여러 가지 보안 역할로 액세스 할 수 있으며 보안 역할은 여러 인공물에 액세스 할 수 있습니다. 따라서 데이터베이스에는 3 개의 테이블이 있습니다. 하나는 인위적인 것을 설명하고 하나는 역할을 설명하고 하나는 인공 지능 ID를 역할 ID에 연결하는 다 대다 연관 테이블입니다.Many to Many Hibernate의 캐스케이드 삭제
우리는 두 가지 클래스를 가지고 있습니다. 하나는 역할을위한 것이고 하나는 인공물을위한 것입니다. artefact 클래스에는 액세스 할 수있는 역할 목록을 반환하는 IList 속성이 있습니다. (그러나 역할은 액세스 할 수있는 인공물을 얻는 속성을 제공하지 않습니다.)
이와 같이, 인공물에 대한 nhibernate 매핑에는 다음이 포함됩니다.
<bag name="AccessRoles" table="ArtefactAccess" order-by="RoleID"
lazy="true" access="field.camelcase-underscore" optimistic-lock="false">
<key column="ArtefactID"/>
<many-to-many class="Role" column="RoleID"/>
</bag>
이 모두 잘 작동하고 내가 인공물을 삭제하면 연관 테이블은 적절하게 정리되고 제거 된 유물과 역할 사이의 모든 참조는 역할은 제대로하지만 삭제되지 않습니다 (제거 - 우리 돈으로 고아가 삭제되기를 원하지 않음).
문제는 - 역할을 삭제하고 자동으로 연결 테이블을 지우는 방법입니다. 현재 역할을 삭제하려고하면 역할에 대한 연결 테이블에 항목이 있으므로 참조 제약 조건이 생깁니다. 역할을 성공적으로 삭제할 수있는 유일한 방법은 해당 역할에 링크 된 모든 인공물을 쿼리하고 인공물의 역할 컬렉션에서 역할을 제거하고 인공물을 업데이트 한 다음 역할을 삭제하는 것입니다. 단순화 된 시스템에서 역할은 다른 테이블/오브젝트의 수에 관계 될 수 있습니다.
역할을 삭제할 때마다이 연관 테이블을 지우고 싶다는 NHibernate에 힌트를 드릴 수 있어야합니다. 가능하면 가능합니다. 그렇다면 어떻게해야합니까?
도움 주셔서 감사합니다.
안녕하세요, 솔루션에서 Role, RolesToAccess 및 Access의 세 가지 클래스를 만들어야합니까? 역할과 액세스의 두 클래스 만있는 솔루션을 알고 있습니까? –