2013-06-03 48 views
0

從Grails的2.2.1 hasMany關係刪除對象時,我正好遇到一個奇怪的行爲。Grails的奇怪removeFrom *行爲

def lessonInstance = Lesson.get(lessonId) 
long id = Long.valueOf(taskId) 
def task = Task.get(id) 
lessonInstance.removeFromTasks(task) 

雖然刪除正在有:

刪除的不工作

def lessonInstance = Lesson.get(lessonId) 
long id = Long.valueOf(taskId)  
def task = lessonInstance.tasks.find { it.id == id } 
lessonInstance.removeFromTasks(task) 

我預期既要工作,我現在很好奇,爲什麼後者的作品和首先不起作用。這裏是包含的域類:

class Lesson{ 
    static hasMany = [tasks:Task] 
    static hasOne = [skill:Skill]  
     static constraints = { 
     tasks(nullable: false, minSize: 1) 
     skill(nullable: true) 
    } 
} 

class Task extends Artefact{ 

    Integer experiencePoints=0 

    Integer credits=0 

    static constraints = { 
     experiencePoints(blank: false, min: 0) 
     credits(blank: false, min: 0) 
    } 
} 

謝謝!

+0

貌似Grails是不撿那個'Task'裝有'得到()'和與事實'Lesson.tasks'是同一個對象。 順便說一句我不知道'Task'或'Artefact'是否有'equals()/ hashCode()'重新定義。 –

+0

如果'Artefact'是一個域對象(每個子類的策略表),你可以嘗試在前一種情況下使用'def task = Artefact.get(id)'。 – dmahapatro

+0

僅供參考 - 'blank:false'對你來說沒有任何幫助。 –

回答