Propagação somente leitura @Transactional de primavera

Estou experimentando usar o padrão de comando para permitir que minha camada da Web trabalhe com entidades do Hibernate no contexto de uma única transação (evitando assim exceções de carregamento lento). Estou, no entanto, confuso agora com como eu deveria lidar com transações.

Meus comandos chamam métodos de camada de serviço que são anotados com@Transactional anotações. Alguns desses métodos de camada de serviço são somente leitura - por exemplo,@Transactional(readOnly=true) - e alguns são de leitura / gravação.

Minha camada de serviço expõe um manipulador de comando que executa comandos passados ​​para ele em nome da camada da web.

@Transactional
public Command handle( Command cmd ) throws CommandException

Eu suponho que estou certo em fazer o manipulador de comandohandle() método transacional. É aí que entra a confusão. Se a implementação de um comando faz chamadas para vários métodos de camada de serviço, não há como o manipulador de comandos saber se as operações chamadas no comando serão somente leitura, leitura / gravação ou uma combinação dos dois.

Eu não entendo como a propagação funciona neste exemplo. Se eu fosse fazer ohandle() métodoreadOnly=true, então o que acontece se o comando chamar um método de camada de serviço anotado com@Transactional(realOnly=false)?

Eu apreciaria uma melhor compreensão disso e daria boas-vindas aos seus comentários ...

Andrew