从 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当然会抛出异常.
有没有办法让休眠刷新他的缓存并更新网站用户?