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

questionAnswers(4)

yourAnswerToTheQuestion