0

hasMany从grails 2.2.1 中的关系中删除对象时,我刚刚遇到了一个奇怪的行为。

删除不适用于:

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)
    }
}

谢谢!

4

2 回答 2

0

听起来问题可能是由于 get 和 find 之间的缓存差异。请参阅 Burt Beckwith 对Grails 中 findAll、getAll 和列表之间的差异的回答。

...我尝试使用 grails 控制台复制问题,但 find 和 get 方法似乎都有效。

于 2013-06-04T10:14:41.073 回答
0

我认为您应该阅读: http: //blog.springsource.org/2010/07/02/gorm-gotchas-part-2/,因为它解释了为什么您必须做更多工作才能使其发挥作用。

于 2013-06-03T19:46:19.433 回答