내가 부모 클래스 인 hbm.xml에 Child 클래스의 일대 다 집합이 있다고 가정 해 보겠습니다. 주어진 부모의 모든 자식을 가능한 한 효율적으로 삭제하려고합니다.NHibernate에서 관련된 세트의 모든 요소를 삭제하는 방법?
foreach (var child in parent1.Children)
session.Delete(child);
parent1.Children.Clear();
이 3+ 다른 SQL 문에서 결과 : 모든 어린이의 외래 키를 설정하는 UPDATE 다음에 아이 엔티티를 가져 오는 SELECT가에 기초 NULL로 이것은 내가 지금 뭘하는지입니다 부모 외래 키, 여러 DELETE 문 다음에 하나씩.
내가보고 싶은 것은 상위 외래 키를 기반으로 모든 하위를 삭제하는 하나의 DELETE입니다. 거기에 NHibernate 방법이 있나요? 아니면 총알을 물고 원시 SQL 문을 발행해야합니까?
자식 개체는 부모 속성이 없습니다, 그것은 하나 hbm.xml에 매핑되지 않습니다. 연결은 부모에서만 정의됩니다. 부모 관점에서이 삭제 작업을 수행 할 수 있습니까, 아니면 inverse many-to-one 연관도 매핑해야합니까? – fejesjoco
나는 여러 번 논의 했으므로, 우리는 하위 엔티티에 ParentId를 매핑해야한다고 거의 확신했다. 첫째로 ... 그것은 아이 테이블에 있습니다. 그래서 그것은 자연에 의해 아이에게 속합니다. 둘째, 많은 이점을 제공합니다. DML; 우리는 여전히 WRITE 연산을 줄일 수 있습니다 (예 : Parent를 단지 읽기 전용으로 만들기'insert/update = "false"'). protected setter ... 등으로'ParentId' 프로퍼티를 만들 수 있습니다. 많은 자유를 얻었습니다 (우리는 지금 서브 쿼리를 할 수 있습니다) –