Este assunto está em dois ou três tópicos, mas ainda não consegui considerar solucionado.
Até concordo que o método atualizar(categoria) seja void, mas ainda não consegui concordar com que a chamada ao método merge() do jeito que está no curso irá "forçar o objeto a ficar no estado MANAGED", pois o merge() não faz isso.
Penso que deveria existir pelo menos aquela atribuição do retorno do merge() ao próprio objeto passado como parâmetro, assim:
categoria = this.em.merge(categoria)
Desta forma, como a passagem de parâmetros em Java é por referência, após a chamada ao atualizar(categoria), o objeto 'categoria' estará, aí sim, MANAGED e qualquer alteração será sincronizada no próximo flush() ou commit().