여기는 Grails 사용자를위한 것입니다. 내가 grails - user 메일 링리스트에서 요청했지만, 며칠 동안 이걸 싸워 왔기 때문에 나는 가능한 한 그물망을 넓혀야한다고 생각했다.Grails - 계단식 삭제가있는 동일한 클래스의 여러 belongsTo
두 객체를 참조하는 다른 객체 (다른 유형)에서 동일한 유형의 두 객체 사이의 관계를 모델링하는 데 어려움이 있습니다.
예를 들어, 은 가족 간의 관계를 모델링한다고 가정합니다. 모든 주어진 관계 "belongsTo"두 다른 가족 구성원. 그래서 여기
class Person {
hasMany[relationships: Relationship]
static mappedBy = [relationships:'p1', relationships:'p2']
}
class Relationship {
Person p1
Person p2
String natureOfRelationship // for example, "cousins"
static belongsTo = [p1: Person, p2: Person]
}
목적은 그 P1 또는 P2 중 하나가 삭제되면, hasMany의지도에있는 모든 관계 객체에 다음 삭제합니다 폭포입니다. 대신, 내가 시도 할 때마다 외래 키 위반으로 끝납니다. 내가 운이 없었
static mapping = {
relationships cascade:'delete'
}
:
http://grails.org/doc/1.0.x/guide/single.html#5.5.2.9%20Custom%20Cascade%20Behaviour
그래서 나는 Person 클래스에이를 추가 할 생각
: 문서에서 다루지로 나는 "폭포"속성을 사용하여 시도 그 중 하나.또한 Grails가 생성 한 devDB.script 파일을보고 이 관계에 외래 키를 설정하는 방법을 확인했습니다. 수동으로 "ON DELETE CASCADE"를 외래 키 제약 조건에 추가하면 제대로 작동하지만 분명히 자동으로 생성 된 데이터베이스 스크립트 에 대한 수동 편집은 가장 강력한 솔루션이 아닙니다. 이상적으로 나는 GORM을 사용하여 그 동작을 지정할 수 있기를 원합니다.
그럼 내 최선의 제안은 무엇입니까? 여러 개의 외부 키/소유자에 계단식 삭제를 적용 할 수있는 방법이 있습니까? Person에서 onDelete 액션 을 사용하여 수동으로이 작업을 수행해야합니까? 에 대한 최대 절전 모드 설정이 필요합니까, 아니면 Grails/GORM에서 어떤 방식으로 할 수 있습니까?
시간과 도움을 주셔서 대단히 감사드립니다.
dave, 어떻게이 문제를 해결 했습니까? 내가 생각하는 코드 : 정적 mappedBy = [관계 : 'p1', 관계 : 'p2'] 문제가있다. –