se chamarmos EntityTransaction.commit(), ele chamará EntityManager.flush() automaticamente?
Sim
Qual é a diferença?
Em flush() as alterações nos dados são refletidas no banco de dados após encontrar o flush, mas ainda está em transaction.flush() DEVE ser incluído em um contexto de transação e você não precisa fazê-lo explicitamente a menos que seja necessário (em casos raros ), quando EntityTransaction.commit() faz isso para você.
Fonte