Я просто столкнулся с странным поведением при удалении объекта из hasMany
Связь в грабелях 2.2.1.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', загруженный' get() 'и с' Lesson.tasks', является одним и тем же объектом. BTW Интересно, есть ли 'Task' или' Artefact' 'переопределены символы equals()/hashCode(). –
Если 'Artefact' является объектом домена (таблица для стратегии подкласса), вы можете попробовать использовать' def task = Artefact.get (id) 'в первом случае. – dmahapatro
Просто FYI - 'blank: false' ничего не делает для вас. –