hasMany アソシエーションから多くのオブジェクトを削除してから、オブジェクト自体を削除すると、奇妙な問題が発生します。
私はドメインクラスのウェブサイトとユーザーを持っています (私は「belongsTo」関係を持っていません):
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 ----->"
}
このメソッドを 1 回呼び出すと、すべて問題ありませんが、1 つの要求(2 人以上のユーザーの削除)で同時に大量のアクションを実行したい場合、休止状態からエラーが発生します:
deleted object would be re-saved by cascade (remove deleted object from associations)
これは、休止状態が Web サイトの関連付けからユーザーを削除しないために発生します。
異なるユーザーによる 2 つのメソッド呼び出しからログを記録します。
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:
最初の呼び出しでは、休止状態は関連付けからユーザーを削除します (userId: 12) が、2 回目は ID 16 のユーザーが多数のユーザーから削除されず、オブジェクトを削除したい場合、休止状態はもちろん例外をスローします。 .
休止状態でキャッシュをフラッシュして websiteUsers を更新する方法はありますか?