2011-04-17 95 views
-1

的Grails 1.3.7與MySQL 5.5removeFrom與級聯全刪除,孤兒不工作

要麼我必須做一些腦死亡,或者Grails的問題http://jira.grails.org/browse/GRAILS-5804http://jira.grails.org/browse/GRAILS-4121和類似這有關。 我:

class Author { 
    String name 
    static hasMany = [books: Book] 
    static constraints = { 
     books cascade: 'all-delete-orphan' 
    } 
    String toString() { 
     return name 
    } 
} 

class Book { 
    String title 
    static belongsTo = [author: Author] 
    static constraints = { 
    } 
    String toString() { 
     return title 
    } 
} 

Bootstrap: 
def a = new Author(name: 'Author0') 
a.save(flush: true, failOnError: true)  
def b = new Book(title: 'Book0') 
a.addToBooks(b).save(flush: true, failOnError: true) 

class AuthorController { 
    def index = { 
     println("Controller code: " + "Old books by author: " + Author.get(1).books) 
     def author = Author.findByName("Author0") 
     def oldBooks = [] 
     oldBooks += author.books // to avoid ConcurrentModificationException 
     oldBooks.each { 
      author.removeFromBooks(it) 
     } 
     author.save(flush: true, failOnError: true) 
     println("Controller code: " + "New books by author: " + Author.get(1).books) 
      render("All done!") 
     } 
    } 

但是,當我瀏覽到本地主機:在保存過程中(:8080 /富/作家/指數我得到一個「foo.Book.author非空屬性引用null或瞬時值」 )

我並不真正瞭解GORM內部結構或Hibernate(代理與非代理實例),我嘗試了使用'get'而不是'find'的所有組合,但無法使其工作。有人可以解釋這是如何工作的嗎?

回答

2

我想你放錯地方的約束,它應該是這樣的:

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

static constraints = { 
    books cascade: 'all-delete-orphan' 
} 

引起該問題。有關此GORM的詳細信息,可以找到here(刪除孩子)。

+0

嗯我試着切換報價,但它沒有幫助。也嘗試切換到hsqldb,這也沒有做任何事情...... – 2011-04-19 20:47:29

+0

@約翰:其實,這不是報價。請注意「靜態映射=」和「靜態約束= ...」 – 2011-04-20 00:48:41

+0

Doh!你當然是對的。絕對是在腦死亡的範疇。我想知道我是否可以從Stackoverflow關閉/刪除這個問題 - 不會向社區添加任何內容。 – 2011-04-20 08:18:42