2010-07-20 5 views
1

나는 3 개 클래스 I 설정 캐스 케이 딩을 어떻게Grails는 삭제하고 캐스 케이 딩

class User { 
static hasMany = [coupons: Coupon] 
} 

class Coupon { 
static belongsTo = [affiliate: Affiliate] 
} 

class Affiliate { 
static hasMany = [coupons: Coupon] 
} 

다음 한 나는 특정 쿠폰을 삭제할 수 있도록 그것은 제휴 및 사용자의 목록에서 제거됩니다. 계속 "부모 행을 삭제하거나 업데이트 할 수 없습니다"

내가 뭔가를 잃어 버렸는데?

답변

4

부모 컬렉션에서 쿠폰을 제거해야합니다. 쿠폰을 삭제 한 서비스에서 수동으로 수행하거나 사용자가 최대 절전 모드로 이벤트를 수행 할 수 있습니다. 나는 당신이 캐스케이드를 가질 수 있다고 생각하지 않는다. 얻을 수있는 가장 가까운 것은 'delete-orphan'이지만, 여전히 작동하려면 연관 관계를 끊을 필요가 있습니다.

매뉴얼 5.5.1 절 참조.

http://grails.org/doc/latest/

기본적으로, 당신은 부모로부터 참조를 제거 쿠폰 클래스에 'beforeDelete'방법을 추가 할 수 있습니다.

grails는 beforeDelete 메소드를 실행하기에 충분히 똑똑합니다. 쿠폰을 삭제하기 전에 추측했습니다. 협회를 어기는 좋은 장소.

서비스 또는 도메인 클래스에서 '수동으로'수행하든, 최대 절전 모드 이벤트를 사용하든간에 코드는 거의 동일합니다.

2

시도는 사용이 작동

static mapping = { 
    cupons cascade: "all-delete-orphan" 
} 
+0

이 추가 ... 당신이 그것을 위해 통합 테스트를 작성해야합니다. 나는 또한'Test.executeUpdate ("id = 123"라는 도메인에서 삭제하지만 자식 삭제를 계단식으로 처리하지 않는다.) 그런 다음''foreign 키 제약 조건을 위반한다 ''오류를 준다. delete()'를 호출합니다. – Guus