從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)
}
}
謝謝!
貌似Grails是不撿那個'Task'裝有'得到()'和與事實'Lesson.tasks'是同一個對象。 順便說一句我不知道'Task'或'Artefact'是否有'equals()/ hashCode()'重新定義。 –
如果'Artefact'是一個域對象(每個子類的策略表),你可以嘗試在前一種情況下使用'def task = Artefact.get(id)'。 – dmahapatro
僅供參考 - 'blank:false'對你來說沒有任何幫助。 –