Zaczynam widzieć "Nie mogę zsynchronizować stanów bazy danych z sesją" w moich dziennikach i ciężko mi to odtworzyć. Czasami działa dobrze ... Widzę dwa wyjątki (zdarzają się w różnym czasie):Nieprzewidywalne "Nie można zsynchronizować stanów bazy danych z sesją" wyjątki w grails
BŁĄD JDBCExceptionReporter - Zakleszczenie znalezione podczas próby uzyskania blokady; spróbuj ponownie ERROR transakcja PatchedDefaultFlushEventListener - Nie można synchronizować stan bazy danych z sesji org.hibernate.exception.LockAcquisitionException: nie można aktualizować: [com.myapp.School # 1911]
I
BŁĄD PatchedDefaultFlushEventListener - Nie można zsynchronizować stanu bazy danych z z sesją org.hibernate.StaleObjectStateException: Wiersz został zaktualizowany lub usunięty przez inną transakcję (lub niezapisana wartość m apping była błędna): [com.myapp.School # 1905]
Oto metoda, gdzie są one wyrzucane:
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)
}
}
Byłem w tym cały dzień, a ja naprawdę docenić jakaś pomoc.
można pisać całe domenę szkole tutaj - 2) dlaczego robisz user = user.merge (kolor: true) –
Czy próbowałeś user.refresh()? Kiedy doświadczam jakiegoś dziwnego zachowania, zazwyczaj odnoszę się do tego postu: http://stackoverflow.com/questions/536601/what-are-your-favorite-grails-debugging-tricks lub, aby być bardziej precyzyjnym, odpowiedź z próbą zapisu . – marko
Ale powinien naprawdę spróbować dowiedzieć się, dlaczego tak się dzieje i jakie jest źródło problemu, nie zrobiłbym obejścia, dopóki nie wiem, dlaczego tak się dzieje na pierwszym miejscu. –