Mam usługę Grails, która jest oznaczona jako transakcyjna i ma wiele rzeczy.Problemy z transakcjami Grails
dodaję kod do tej metody i nie uzyskanie wyników, które mam się spodziewać, kiedy krok po kroku go:
- Mam kod, który wywołuje
.save()
, które nie mogą być postrzegane w backend MySQL aż cała metoda kończy. Tego właśnie oczekiwałbym, biorąc pod uwagę, że metoda obsługi jest transakcyjna. - Mam inny kod, który wywołuje
.save()
, który można zobaczyć w MySQL przed zakończeniem metody serwisowej. Nie rozumiem tego i nie rozumiem rozbieżności między tym i 1. - Mam jeszcze więcej kodu, który używa
groovy.sql.Sql
do wstawienia do bazy danych. Zgaduję, że jest to poza przetwarzaniem transakcji Grails, więc fakt, że to zobowiązuje się przed zakończeniem metody ma sens. Czy mogę uzyskać Grailsa do zarządzania tym wewnątrz transakcji?
Proszę odrzucić wszelkie błędy w moich założeniach. Oto odpowiedni kod:
Główne usługi Metoda
public void updateDb(Date date) {
// Create the results
if (createResults() > 0) {
createA()
createB()
}
}
createa
A a = new a()
a.user = user
a.week = week
a.save()
createB
userWeek = new UserWeek(user: user)
userWeek.number = 1
userWeek.save(flush: true)
createResults
String insert = "insert into ..."
Sql sql = new Sql(dataSource)
sql.execute(insert)
dodałem flush:true
aby równo, ale teraz rozumiem, że tylko do spłukiwania hibernacji, ale w rzeczywistości nie popełnić transakcję, ponieważ jest transakcyjny. Co ja robię źle?
Nie jest jasne, co dzieje się z kodem, który publikujesz, i wydaje mi się, że łamiesz konwencje. Z jednego kontekstu transakcyjnego (wywołania metody grails) celowo próbujesz wyrwać się z transakcji? Ponadto, dlaczego zmuszasz kolor? –
@HansWesterbeek Nie próbowałem zerwać z żadną transakcją - po prostu patrzę na kod, który odziedziczyłem i próbuję nadać mu sens. Zmusiłem kolor jako test (ponieważ wtedy go nie rozumiałem), ale zamierzam go usunąć.Nic (poza obecną metodą 'createResults', która działa poza transakcją) powinno się zatwierdzać do momentu zatwierdzenia pełnej transakcji, prawda? – skaz