2012-06-22 2 views
2

질문은 subj입니다.removeFrom * 메서드는 자식 항목을 DB에서 제거해야합니까? 아니면 부모 - 자식 관계를 제거해야합니까?

현재 내가 관찰하는 동작은 Parent.removeFromChilds(child)으로 전화 할 때 자식이 내 DB에서 제거되지 않는다는 것입니다. 즉, Child.findBy...(args)으로 찾을 수 있습니다.

올바른 동작인지 궁금합니다. 그렇다면 하나의 거래 내에서 관계와 아동을 모두 제거하는 가장 좋은 방법은 무엇입니까?

아니요 - 내가 뭘 잘못 할 수 있습니까?

+0

나는 이것이 사실이라고 생각하지 않습니다. 비슷한 parent.removeFromChildren (child) 및 parent.save (flush : true)를 수행하면 자식이 컬렉션에서 제거되고 데이터베이스에서 삭제됩니다 (오류가 없다고 가정). – Gregg

+0

@ 그레그 : 나는 똑같이하고있다. 오류가 없습니다. 내가 생각할 수있는 유일한 방법은 동작을 확인하는 방법입니다. 부모 테스트 단위 테스트에서 설명 된대로 작동합니다 (아직 실제 DB로 테스트 한 적이 없습니다). – Roman

답변

3

1 대 다수의 소유면을 삭제하면 기본적으로 계단식이 삭제됩니다. 하위 항목을 삭제하면 삭제되지 않습니다. 관계의 소유 측에서 'all-delete-orphan'의 사용자 정의 계단식 동작을 지정하여이를 변경할 수 있습니다. Grails의 문서에서 :

class Person { 

String firstName 

static hasMany = [addresses: Address] 

static mapping = { addresses cascade: "all-delete-orphan" } } 

업데이트

Part 2 of GORM Gotchas 그리 분명 addToremoveFrom 행동에 정말 좋은 고장이있다. 나는 그것이 당신이 찾고있는 정확한 정보를 포함하고 있다고 생각합니다.

관련 문제