Grails Gorm:Can';删除后不能删除

Grails Gorm:Can';删除后不能删除,grails,gorm,Grails,Gorm,我对戈姆有一个(对我来说很奇怪的)问题 我们必须清理我们项目中的一些数据,除了一件事情外,其他一切都很好 下面是我们的域类的摘录 class Person { ... } class Grade { ... static hasMany = [speaker: Person] } 现在我正在搜索要删除的特定人群(重复)。找到它们后,我需要将要删除的人的所有实例切换到剩余的实例。下面是这一逻辑的摘录: def personDelete = Person.get(it.get

我对戈姆有一个(对我来说很奇怪的)问题

我们必须清理我们项目中的一些数据,除了一件事情外,其他一切都很好

下面是我们的域类的摘录

class Person {
    ...
}

class Grade {
   ...
   static hasMany = [speaker: Person]
}
现在我正在搜索要删除的特定人群(重复)。找到它们后,我需要将要删除的人的所有实例切换到剩余的实例。下面是这一逻辑的摘录:

def personDelete = Person.get(it.get("bhlneuPerson"))
def personBase = Person.get(it.get("bhlPerson"))

...

def grades = Grade.withCriteria {
    speaker {
        eq("id", personDelete.id)
    }
}
grades.each {
    it.removeFromSpeaker(personDelete)
    it.addToSpeaker(personBase)
    it.save(failOnError: true)
}

...
之后,我收集在列表中找到的所有ID,并对其进行迭代以删除相应的人员

people.each {
    def pers = Person.get(it)
    if(pers)
        pers.delete()
}
但我得到了以下错误:

| Error 2015-09-01 15:02:36,256 [http-bio-8080-exec-15] ERROR errors.GrailsExceptionResolver  - ObjectDeletedException occurred when processing request: [GET] /migration/testBHLNEU
deleted object would be re-saved by cascade (remove deleted object from associations): [Person#3970]. Stacktrace follows:
Message: deleted object would be re-saved by cascade (remove deleted object from associations): [Person#3970]; nested exception is org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [Person#3970]
Line | Method
->>  200 | doFilter  in grails.plugin.cache.web.filter.PageFragmentCachingFilter
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|     63 | doFilter  in grails.plugin.cache.web.filter.AbstractFilter
|     53 | doFilter  in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
|     49 | doFilter  in grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter
|     82 | doFilter  in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run       in java.lang.Thread
Caused by ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [Person#3970]
执行之后,仍然有一个带有老人id(#3970)的等级对象,但也有一个新的等级对象,它是在上述执行过程中添加的

我的错误在哪里?:)


提前谢谢

如果在
it.removeFromSpeaker()
之后添加
it.save(flush:true)
会发生什么情况?不幸的是,什么都没有。虽然我认为我把它放在addTo语句之后并不重要。我会试试看。测试过了,什么都没变