ログに「データベースの状態をセッションと同期できませんでした」という例外が表示されるようになり、それを再現するのに苦労しています。うまく動作することもあります... 2 つの例外が発生しています (これらは異なるタイミングで発生しています)。
エラー JDBCExceptionReporter - ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションを再起動してみてください ERROR PatchedDefaultFlushEventListener - データベースの状態をセッション org.hibernate.exception.LockAcquisitionException と同期できませんでした: 更新できませんでした: [com.myapp.School#1911]
と
エラー PatchedDefaultFlushEventListener - データベースの状態をセッション org.hibernate.StaleObjectStateException と同期できませんでした: 別のトランザクションによって行が更新または削除されました (または、保存されていない値のマッピングが正しくありませんでした): [com.myapp.School#1905]
それらがスローされるメソッドは次のとおりです。
def populateFriends(ArrayList<FriendView> friends, User user) {
friends.eachWithIndex { friendView, index ->
def friend = Friend.findByFriendId(friendView.id) ?: new Friend()
def schoolName = friendView.schoolName
def school = null
if (schoolName) {
school = School.findByName(schoolName) ?: new School(name: schoolName).save(flush:true)
}
if (school) {
// add to user's school list
user = User.get(user.id)
user.addToSchools(school)
user = user.merge(flush: true)
user.save(flush: true)
friend.school = school
}
friend.save(flush: true)
}
}
私は一日中これにいたので、助けていただければ幸いです。