2010-06-09 3 views
0

나는이 다음 (간체) 최대 절전 모드 엔티티 계단식하지 삭제합니다. 상위 컨텐츠는 패키지로 다시 연결되며 캐스케이드는 모두로 설정됩니다. 최상위 콘텐츠에는 많은 "하위"콘텐츠가있을 수 있으며 각 하위 콘텐츠에는 자체 하위 콘텐츠가 많이있을 수 있습니다. 각 하위 컨텐츠에는 상위 패키지 (상위 패키지와 동일한 패키지 일 수도 있고 아닐 수도있는 상위 패키지)가 있습니다 (예 : 패키지와 컨텐츠의 다 대일 관계).는 자체 참조 엔티티

관계는 ManyToOne (컨텐츠로 패키지) 및 ManyToMany (컨텐츠는 서브 컨텐츠로)가되어야하지만 현재 각 서브 컨텐츠를 테스트하고있는 경우 하나의 패키지 또는 컨텐츠에만 관련됩니다.

문제는 내가 패키지를 삭제하고 세션을 세척 할 때, 나는 최대 절전 모드 오류 난 여전히 테이블 subcontents에서 참조 특정 content_id로, 테이블 subcontents에 외래 키 제약 조건을 위반하고있어 진술서를 얻을 수 있다는 것입니다.

패키지를 삭제하기 전에 내용을 구체적으로 (재귀 적으로) 삭제하려고 시도했지만 동일한 오류가 발생합니다.

이 엔티티 트리가 제대로 삭제되지 않는 이유가 있습니까?

편집

: 답변을 읽은 후/코멘트 나는 콘텐츠가 여러 패키지를 가질 수 없습니다, 그리고 하위 내용이 여러 부모 내용을 가질 수 없습니다 것을 깨달았다, 그래서 나는 OneToOne과 OneToMany에 ManyToOne 및 ManyToMany의 주석을 수정했습니다. 불행히도 그 문제를 해결하지 못했습니다.

또한 Content에서 양방향 링크를 부모 패키지로 다시 추가했습니다.이 패키지는 단순화 된 코드에서 제외했습니다.

+1

패키지와 콘텐츠 간의 관계는 양방향입니까 (코드에는이 내용이 표시되지 않지만 설명을 읽은 후에는 의심 스럽습니다). –

+0

예, 관계는 양방향입니다. 단순화 된 코드에서 제외하지 않아야합니다. – jwaddell

+0

흠 ... Package와 Content 사이의 카디널리티와 여전히 일치하지 않습니다. OneToOne 또는 OneToMany입니까? (현재 패키지에 대한 ManyToOne이 있습니까?) –

답변

0

문제는 내가 각 패키지를 삭제 한 후에 세션을 비우고 지우고 모델의 순환 종속성으로 인해 모든 것이 삭제되지 않았기 때문에 발생하는 것으로 밝혀졌습니다. 매우 큰 데이터 세트가 관련되어 있기 때문에 플러시 및 지우기가 필요합니다. 결국 나는 현재 패키지에 종속 된 모든 엔티티 세트가 구성되고 (다른 패키지를 포함 할 수 있음) 플러시 및 지우기를 호출하기 전에 모두 삭제되도록 패키지를 변경했습니다.

1

ManyToOne 매핑을 기반으로 하나의 콘텐츠에 많은 패키지가 있고 위의 간단한 코드에서 콘텐츠 클래스의 "패키지"컬렉션 필드를 제거했다고 가정합니다.

그래서 "패키지"컬렉션 필드에 대해 하위 항목에있는 것과 같이 계단식 삭제 기능이 있습니까? 그렇게한다면 나는 그것이 효과가 있다고 생각합니다. 루트 컨텐츠를 삭제하면 각 서브 컨텐츠에 대해 계단식 삭제가 수행되어야하며 각 컨텐츠는 패키지에서 계단식 삭제를 수행합니다.

그게 효과가 있습니까?

+0

이 글을 읽은 후 좀 더 생각해 봤는데 실제로 ManyToOne 관계가되어서는 안된다는 것을 깨달았습니다. 그래서 OneToOne이되도록 수정했습니다. 나는 여전히 ManyToOne 관계를 반영하는 데이터베이스에 데이터가 없기 때문에 같은 오류가 발생합니다. 패키지와 콘텐츠 간의 관계 요약을 업데이트했습니다. "상위"콘텐츠에 대한 패키지는 OneToOne이지만 상위 및 하위 내용은 동일한 패키지를 공유 할 수 있으므로 패키지에 대한 ManyToOne 패키지로 돌아갑니다. 그 불일치가 문제의 원인이 될 수 있습니까? – jwaddell