2009-10-15 3 views
4

내 데이터베이스에는 다 대 다 관계가있는 사용자 및 사용자 그룹이 있습니다. 사용자가 UserGroup 집합을 가지고 있지만 UserGroup 도메인 개체는 사용자를 볼 수 없습니다. 내가 달성하기 위해 노력하고있어다 대다 연관을 자동으로 삭제하는 방법 (다단계)

<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> 
    ... 

내가 사용자 또는 사용자 그룹 중 하나를 삭제 접합 테이블에서 상관 관계를 삭제 NHibernate에 있습니다. 또한 사용자 및 그룹은의 자식 개체입니다. 도메인이라고 부르 자. 도메인은 cascade="all-delete-orphans"입니다. 따라서 도메인이 삭제되면 해당 사용자와 사용자 그룹을 모두 계단식으로 삭제합니다.

사용자에게 돌아 가기 -> UserGroup 관계 : 올바르게 이해하면 관련된 객체 자체가 아닌 두 객체 사이의 연관 관계를 삭제하기 때문에 삭제와 관련된 양식을 사용할 수 없습니다. (그룹이 고아라고해도 그룹이 사라지지 않아야합니다. 그룹이없는 사용자는 내 세계에서 유효한 것입니다. 그는 단지 아무 것도 할 수있는 권리가 없습니다.)

이벤트를 볼 필요가 있습니까?/요격기? 또는 매핑을 제어하여 달성하려는 작업을 수행 할 수 있습니까?

답변

2

지원하는 데이터베이스를 사용하는 경우 외부 키 제약 조건의 형태로 데이터베이스 자체에 계단식을 설정할 수 있습니까?

+0

그럴 수도 있지만 NHibernate 캐시에 많은 문제가 발생할 수 있습니다. – froh42

+1

AFAIK NHibernate가있는 데이터베이스에서 캐스케이드 삭제를 사용할 때 아무런 문제가 없습니다. 이벤트 리스너 (NHibernate 2.1에서)를 사용하여이 문제를 해결하는 방법에 대한 설명은이 문서를 참조하십시오. http://elegantcode.com/2009/07/19/nhibernate-2-1-and-collection-event-listeners/ –

+0

Michael, 모든 입력과 링크에 감사드립니다. 이미 이벤트 리스너의 지시를 조사 했으므로 (사실상 응용 프로그램에 아무 것도없는 이벤트 리스너를 등록하는 것처럼 진행했습니다) 이것이 진행될 방향입니다. 데이터베이스가 장면 뒤에서 사물을 삭제할 수 있다고해도 (훨씬 더 빨라질 수도 있음), 나는 모든 것을 같은 층에 유지하고자하므로 그렇게하지 않는 것이 좋습니다. 내 응용 프로그램의 nhibernate-2 뿌리부터 실행 가능한 HQL 대신 여전히 건강에 좋지 않은 양의 SQL이 있습니다. – froh42