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语句之后并不重要。我会试试看。测试过了,什么都没变