Spring @Transactional propagacja tylko do odczytu
Eksperymentuję z użyciem wzorca poleceń, aby umożliwić mojej warstwie internetowej pracę z obiektami Hibernate w kontekście pojedynczej transakcji (unikając w ten sposób wyjątków ładowania leniwych). Jestem jednak zdezorientowany tym, jak powinienem radzić sobie z transakcjami.
Moje polecenia wywołują metody warstwy usług z adnotacjami@Transactional
adnotacje. Niektóre z tych metod warstwy usług są tylko do odczytu - np.@Transactional(readOnly=true)
- a niektóre są do odczytu / zapisu.
Moja warstwa usług udostępnia program obsługi poleceń, który wykonuje polecenia przekazane do niego w imieniu warstwy internetowej.
@Transactional
public Command handle( Command cmd ) throws CommandException
Zakładam, że mam rację w tworzeniu komendantahandle()
metoda transakcyjna. W tym miejscu pojawia się zamieszanie. Jeśli implementacja polecenia powoduje wywołanie wielu metod warstwy usług, nie ma możliwości, aby program obsługi komend wiedział, czy operacje wywoływane w komendzie będą tylko do odczytu, odczytu / zapisu lub kombinacji z dwóch.
Nie rozumiem, jak działa propagacja w tym przykładzie. Gdybym miał zrobićhandle()
metodareadOnly=true
, co się stanie, jeśli polecenie wywoła następnie metodę warstwy usług z adnotacją@Transactional(realOnly=false)
?
Byłbym wdzięczny za lepsze zrozumienie tego i powitanie Państwa komentarzy ...
Andrzej