Fala Mestre,
Você citou sobre esse detalhe das transações não serem responsabilidades do repositório. Se estivéssemos implementando com o doctrine esse repositório e, por exemplo, no método de adicionar eu chamar o entityManager->flush() estaria cometendo o mesmo equívoco ou posso usar o flush sem medo de ser feliz diretamente do repositorio? Lembro de já ter lido que o flush realiza uma transação implicita via a unidade de trabalho do doctrine ou algo do gênero.