Grails奇怪的removeFrom *行为

时间:2013-06-03 13:16:42

标签: grails gorm grails-domain-class

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

使用

删除无法正常工作
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)
    }
}

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为你应该阅读:http://blog.springsource.org/2010/07/02/gorm-gotchas-part-2/,因为它解释了为什么你必须多做一些,让它发挥作用。

答案 1 :(得分:0)

听起来问题可能是由于get和find之间的缓存差异。请参阅Burt Beckwith对Difference between findAll, getAll and list in Grails的回答。

...我尝试使用grails控制台复制问题但是找到并获取方法似乎都有效。