0

从 hasMany 关联中删除许多对象然后删除对象本身时,我遇到了奇怪的问题。

我有域类网站和用户(我没有“属于”关系):

class User {
}
class Website {
    static hasMany = [websiteUsers : User]
}

这个方法:

void deleteUserFromWebsite(User user,Website website){
    log.debug "-----> deleteUserFromWebsite()"
    println website.websiteUsers
    website.removeFromWebsiteUsers(user)
    println website.websiteUsers
    user.delete(flush:true)
    log.debug "deleteUserFromWebsite ----->"
}

当我调用此方法一次时,一切正常,但是当我想在一个请求中同时进行大规模操作(删除 2 个或更多用户)时,我遇到了休眠错误:

deleted object would be re-saved by cascade (remove deleted object from associations)

发生这种情况是因为休眠不会将用户从网站的关联中删除。

从不同用户的两个方法调用中记录:

2013-08-19 16:49:56,769 [http-bio-8080-exec-9] DEBUG website.WebsiteService  - -----> deleteUserFromWebsite)
[com.**.security.User : 17, com.**.security.User : 3, com.**.security.User : 12, com.**.security.User : 21, com.**.security.User : 16]
[com.**.security.User : 17, com.**.security.User : 3, com.**.security.User : 21, com.**.security.User : 16]
2013-08-19 16:49:56,777 [http-bio-8080-exec-9] DEBUG website.WebsiteService  - deleteUserFromWebsite ----->
[com.**.security.User : 17, com.**.security.User : 3, com.**.security.User : 21, com.**.security.User : 16]
2013-08-19 16:49:56,811 [http-bio-8080-exec-9] ERROR errors.GrailsExceptionResolver  - ObjectDeletedException occurred when processing request: [POST] /**/**/** - parameters:
users: 12,16
websiteId: mol24o
deleted object would be re-saved by cascade (remove deleted object from associations): [com.**.security.User#16]. Stacktrace follows:

在第一次调用hibernate从关联中删除用户(userId:12),但是第二次,id为16的用户没有从有很多中删除,然后当我想删除对象时,hibernate当然会抛出异常.

有没有办法让休眠刷新他的缓存并更新网站用户?

4

1 回答 1

0

你怎么称呼“群众行动”?该错误表明您正在使用(或引用)您尝试删除的用户。

例如,如果您在删除时循环浏览 websiteUsers 集合,则会导致此错误。

看看GORM Gotchas可以很好地解释这一点。

于 2013-08-19T16:16:10.187 回答