2011-02-09 4 views
1

Grails 1.3.6을 사용하고 있으며 저장을 올바르게 계단식으로 처리하는 데 문제가 있습니다. 문제는 특별히 두 개의 상위 클래스가있는 클래스에 있습니다.Grails/GORM이 잘못된 순서로 저장됩니다.

class Location { 
    String city 
    static hasMany = [authors: Author, publishers: Publisher] 
} 

class Author { 
    String name 
    static belongsTo = [location: Location] 
    static hasMany = [books: Book] 
} 

class Publisher { 
    String name 
    static belongsTo = [location: Location] 
    static hasMany = [books: Book] 
} 

class Book { 
    String title 
    static belongsTo = [author: Author, publisher: Publisher] 
} 

class Srv1Service { 

    static transactional = true 

    def loadData() { 
     def l1 = new Location(city: "London") 

     def a1 = new Author(name: "Graham Greene") 
     l1.addToAuthors(a1) 

     def p1 = new Publisher(name: "Some Press") 
     l1.addToPublishers(p1) 

     def b1 = new Book(title: "The Comedians") 
     a1.addToBooks(b1) 
     p1.addToBooks(b1) 

     l1.save() 
    } 
} 

나는 위의 loadData를 실행하면 예약 인스턴스가 오류의 결과로, 게시자 인스턴스 전에 저장은 "-null이 아닌 속성이 null 또는 과도 값을 참조 : 나는 시도하고있는 무슨의 단순화 된 버전이있다 : adhoc.Book.publisher ".

저는 약간의 성공으로 관계를 정의하는 다양한 방법을 시도했습니다. 나는 중간 저장을 시도하고 이것은 작동하지만 아이 데이터를 저장하면 상위 테이블이 업데이트된다는 것을 알 수 있습니다. 즉, Location, Author 및 Publisher 모두 버전 1로 업데이트됩니다. 또한 코드를 유지하고 싶습니다. 나는 가능한 한 간단합니다.) 테이블 연결을 피하고 싶습니다.

감사의 말을 전합니다.

답변

2

좋아요, 여기 열쇠는 부모님과 어린이가 저장하는 것입니다. Book은 Publisher와 Author 모두에게 어린이이기 때문에 Book에 관해서는 문제가 있습니다. GORM이 위치 저장 시도, 작성자 저장 시도, 작성자 시도 BUT 도서에 일시적인 게시자가 있기 때문에 저장에 실패했습니다. 중간 당신이 당신의 책을 만들 직전에 저장할 추가

봅니다 :

def loadData() { 
    def l1 = new Location(city: "London") 

    def a1 = new Author(name: "Graham Greene") 
    l1.addToAuthors(a1) 

    def p1 = new Publisher(name: "Some Press") 
    l1.addToPublishers(p1) 
    l1.save() // add this save 

    def b1 = new Book(title: "The Comedians") 
    a1.addToBooks(b1) 
    p1.addToBooks(b1) 

    l1.save() 
} 

나는 당신의 도메인 클래스가이 저장에 추가하는 로컬 Grails의 프로젝트를 만들었습니다. 계단식 연결은 예상대로 작동합니다.

관련 문제