se chiamiamo EntityTransaction.commit(), chiama automaticamenteEntityManager.flush()?
Sì
qual è la differenza?
In flush() le modifiche ai dati si riflettono nel database dopo aver riscontrato flush, ma è ancora in transaction.flush() DEVE essere racchiuso in un contesto di transazione e non è necessario farlo esplicitamente a meno che non sia necessario (in rari casi ), quando EntityTransaction.commit() lo fa per te.
Fonte