Znalazłem wiele postów dotyczących tego tematu, ale wszystkie odpowiedzi były po prostu linkami do dokumentacji bez przykładowego kodu, tj. Jak używać współbieżności w praktyce.Współbieżność z Hibernacja na wiosnę
Moja sytuacja: Mam podmiot House
z (na simplyfication) dwóch atrybutów, number
(ID) i owner
. Baza danych jest inicjowana 10 Houses
z number
1-10 i owner
zawsze null
.
Chcę przypisać nowego właściciela do domu, w którym nie ma właściciela, a najmniejszego number
. Mój kod wygląda następująco:
@Transactional
void assignNewOwner(String newOwner) {
//this is flagged as @Transactional too
House tmp = houseDao.getHouseWithoutOwnerAndSmallestNumber();
tmp.setOwner(newOwner);
//this is flagged as @Transactional too
houseDao.update(tmp);
}
Dla mojego zrozumienia, chociaż @Transactional
stosowany jest ten sam House
mogłyby być przypisane dwa razy do różnych właścicieli, jeśli dwa wnioski sprowadzić ten sam pusty House
jak tmp
. Jak mogę się upewnić, że tak się nie stanie?
Wiem, w tym aktualizacja w wyborze pustego House
rozwiąże problem, ale w niedalekiej przyszłości chcę zmodyfikować/pracować z obiektem tmp
więcej.
'' houseDao.update (tmp); 'jest niepotrzebne, ponieważ' tmp' jest jednostką zarządzaną (jesteś w metodzie transakcyjnej). Zmiany będą zachowane bez potrzeby osobnego 'update()'. – Kayaman