비교적 단순한 Grails 프로젝트에서 캐스케이드 삭제 동작을 생성하는 올바른 구성을 만들기 위해 애를 쓰고 있습니다. 나는 저자를 만들 경우Grails (GORM) 다 대일 캐스케이드 삭제 동작
class Author {
String name
static constraints = {
}
}
및
class Book {
String title
Author author
static constraints = {
}
}
하고 해당 저자에 의해 쓰여진 책을 만들고, 내가 삭제할 수 없습니다입니다 :
나는 다음과 같은 간단한 도메인 클래스를 말해봐 먼저 수동으로 책을 삭제하지 않고 작성자. 나는 "무결성 제약 위반 (Integrity constraint violation)"을 받는다. 이것은 "책"테이블의 "저자"열에 "제한"으로 "외래 키 제약 조건"이있는 MySQL (내 기본 데이터베이스)이 Grails에서 작성 되었기 때문에 놀라운 일이 아닙니다 (이 동작은 Grails의 기대치와 일치합니다 내가 그것을 이해할 때 문서화).이제 책 테이블의 "작성자"열의 기본 데이터베이스 제약 조건을 "제한"에서 "계단식"으로 수동으로 변경하면 원하는 동작이 나타납니다. 즉, 작성자를 삭제하면 모든 서적도 삭제됩니다.
그래서 저자 컬럼에서 "on delete cascade"가있는 "book"테이블을 만드는 방식으로 Grails "Book"클래스를 변경하고 싶습니다. 나는 이런 종류의 일을하는 것에 대한 많은 정보와 "belongsTo"와 명시적인 "매핑"을 사용하는 GORM 기본값을 읽었습니다.
Author author
static belongsTo = [author: Author]
이것
그것을 만드는
에 "belongsTo를"설명서에 따라이 작업을 수행 할 수한 가지 방법은에서 예약 클래스의 라인을 변경하는 것 같았다 저자가 관계의 "소유주"임을 명시합니다. 설명서를 보면 이것이 내가 수행하고있는 계단식 삭제 동작을 생성해야한다고 제안하는 것 같습니다. 그러나 명시 적으로 "hasMany = [books : Book]"을 Author 클래스에 추가하지 않으면 작동하지 않습니다. 나는 이것을 원하지 않는다. (이 소원은 실제 사업 영역에서 더 의미가 있지만, 이해의 연습과 마찬가지로 저자 도메인 클래스에서 명시 적으로 책에 대해 알고 있어야하는 이유는 아직 없습니다.
Grails 설정을 사용하여 Author 클래스를 변경하지 않고도 데이터베이스에서 "계단식 삭제"설정을 생성하도록 Book 클래스를 변경하고 싶습니다. 나는 명시적인 매핑을 사용하여 시도 :
static mapping = {
author cascade: 'all'
}
및 기타 명시 적 매핑 또는 "belongsTo"옵션과 조합. 이것은 작동하지 않았다.
기본 SQL 데이터베이스의 "제약 조건"을 간단히 변경하면 내가 원하는 동작을 제공한다는 것을 알게되면 Grails를 통해이를 얻을 수있는 방법이 있습니까? 그렇지 않다면, 나는 여기서 뭔가 근본적인 것을 잘못 이해했거나 바보 같은 짓을하려고합니까?
어떤 Grails 버전을 사용하고 있습니까? –