0

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 を更新する方法はありますか?

4

1 に答える 1