2010-04-18 2 views
1

Session.flar()는 Session이 삭제 될 때마다 자식을 삭제합니다.최대 절전 모드 계단식 : 부모에서 null로 설정하면 자식을 삭제해야합니까?

OneToOne은 어떤가요? null로 설정하는 것은 올바른 방법이 아닙니다. OneToOne에 대한 clear() 메서드가 없습니다.

Table_A에는 OneToOne이 Table_B를 참조하는 열 (PK가 아님)이 있습니다.

내 경우에 Hib가 예상대로 작동하는지 궁금합니다.

내 계단식 옵션이 "all, delete-orphan"으로 설정되어 있습니다.

Table_A @OneToOne Table_B

Table_B @OneToMany Table_C는

는 이제 Table_A 것 같습니다. getTable_B. getTable_C_Collection()

Table_C 컬렉션에 요소가 있다고 가정합니다. 그때

, null로 Table_B 링크를 설정하면 모든 Table_C 수집 요소를 삭제해야합니다 : 내가 최대 절전 모드에서 기대

.

발생하지 않습니다. 그들은 고아가되었습니다!

+0

최대 절전 모드 구성 (또는 최대 절전 모드 주석을 사용하는 경우 특수 효과)을 게시 할 수 있습니까? 구성 문제가있는 것 같습니다. –

+0

Table_B를 삭제하면 Table_C의 멤버가 직접 삭제됩니까? 아니면 Table_A에서 Table_B 링크를 null로 설정 한 경우에만 문제입니까? –

+0

@ Jim Hurne 두 번째 댓글 : 만약 내가 당신을 이해한다면, 내 대답은 이것입니다 : 나는 B의 인스턴스를 삭제하고 싶지 않습니다! 나는 A를 다루고 싶다, 그것은 주요 객체이다. B에 대한 참조를 가지고있다. 그래서 나는 그의 B 링크를 지우고 Hibernate가 다른 것들을 할 것이라고 기대한다. – EugeneP

답변

1

아니요, 계단식 연결을 사용하는 경우 부모를 삭제하면 자녀가 삭제됩니다.

데이터베이스에 DELETE SQL을 보내야하며 null 참조 만 설정하면됩니다.

+0

@duffymo하지만 그것은 이상합니다. 참조 : 링크 된 객체 (자식)를 삭제하는 방법 : Collection.clear(). OneToOne으로이 작업을 수행하는 방법은 무엇입니까? OneToOneLink와 같은 것이 필요합니다.clear() 그리고이 작업을 수행하는 유일한 방법은 NULL을 참조하도록 설정되어 있음을 확인하는 것입니다. – EugeneP

2

"all, delete-orphan"대신 "all-delete-orphan"을 시도해 보셨습니까? 두 사람은 똑같이 작동해야하지만, 과거에는 다른 사람과 다른 행동을하는 문제가있었습니다. 이러한 문제는 실제로 버그이므로 다른 하나가 아닌 다른 동작을 사용하는 경우 open a bug이어야합니다.

최대 절전 모드 매핑에서 inverse='true' 설정으로 재생할 수도 있습니다. documentationthis Stack Overflow Question에서 inverse = true와 같이 보입니다. 캐스케이드 삭제가 올바르게 작동하기 위해서는 종종 중요합니다.