2014-09-29 48 views
0

给定一个域类:可以更改域对象字段导致grails域被认为是修改/脏?

class Book { 
    def title 
    Author author 
} 

class Author { 
    def name 
} 

鉴于一本书实例:

Author author = new Author(name: 'joe') 
author.save() 
Book book = new Book(author:author, title: 'groovy book') 
book.save() 

如果我改变了作者的名字:

author.name = 'john' 

是本书认为脏?或修改?

+0

如果你希望它们被持久化,'title'和'name'属性应该被赋予'String'类型,而不是'def' – 2014-09-29 20:29:32

回答

1

不,在此情况下,book不被视为dirty,因为book已被保存。只有author被认为是dirty。鉴于book没有任何财产已经改变,只有author财产。

+1

这是真的,你可以使用一些GORM辅助方法来看到''println author.isDirty()','println book.isDirty()','println author.getDirtyPropertyNames()','println book.getDirtyPropertyNames()'),但逻辑上你可能会说如果一个实例的属性是脏的,那么这个不干净。如果这使用传统的基于集合的映射方法,通过'author.addToBooks(book)'持久化该书籍,那么书籍实例中的更改会玷污作者,并且保存作者会过度验证并保存该书籍。但这不是它在逆向工作的方式。 – 2014-09-30 07:28:42