3

다 대다 관계가있는 2 개의 클래스가 있습니다. 나는 어떤 일이 일어나길 원한다. 나는 한 면만 삭제할 때마다 연합 기록이 삭제 될 염려없이 삭제 될 것이다.많은 삭제를 nhibernate로 처리

단순화 된 모델 :

클래스 : 무시와

class Qualification 
{ 
    IList<ProfessionalListing> ProfessionalListings 
} 

class ProfessionalListing 
{ 
    IList<Qualification> Qualifications 

    void AddQualification(Qualification qualification) 
    { 
     Qualifications.Add(qualification); 
     qualification.ProfessionalListings.Add(this); 
    } 
} 

유창 자동 매핑은 :

void Override(AutoMapping<Qualification> mapping) 
{ 
    mapping.HasManyToMany(x => x.ProfessionalListings).Inverse(); 
} 

void Override(AutoMapping<ProfessionalListing> mapping) 
{ 
    mapping.HasManyToMany(x => x.Qualifications).Not.LazyLoad(); 
} 

나는 폭포와 역 설정의 다양한 조합을 시도하고 있지만, 거기 수 없다. 캐스케이드가없고 역이없는 경우 내 컬렉션에 복제 된 엔티티가 생깁니다. 한면에 반전을 설정하면 복제가 사라 지지만 자격을 삭제하려고하면 '삭제 된 객체가 계단식으로 다시 저장됩니다.'라는 메시지가 나타납니다.

어떻게해야합니까?

내가 삭제 한 각 개체의 연결을 지우는 책임을 져야합니까?

답변

0

연결된 개체를 삭제해야 할 경우 AllDeleteOrphan 케스케이드 설정을 구성 할 수 있습니다. 그런 다음 연관에서 개체를 제거하면 제거됩니다.

+0

그는 개체가 제거되는 것을 원하지 않으며, 개체 간의 연결 만 원하지 않습니다. –

2

many - to - many 테이블은 실제로 목록의 영구 양식 (ProfessionalListingsQualifications)입니다. 개체 중 하나를 삭제하면 여전히 다른 개체의 목록에 있습니다.

당신의 NHibernate가 당신의리스트를 업데이트한다고 기대할 수는 없습니다. 예를 들어 데이터베이스에서 자격을 삭제하면 해당 자격을 제거하지 않았으므로 자격 목록에 그대로 남아 있습니다. Hibernate는 당신의리스트를 업데이트하지 않는다.

ProfessionalListings은 역 목록입니다. 즉,로드되지만 저장되지는 ​​않습니다. 자격이 삭제되면 적어도 Qualifications 목록을 업데이트해야합니다. 이것은 비즈니스 로직에 의해 관리되는 클래스 모델 내의 규칙적인 일관성입니다.

관련 문제