pokud zavoláme EntityTransaction.commit(), zavolá to automaticky EntityManager.flush()?
Ano
jaký je rozdíl?
Ve flush() se změny dat projeví v databázi poté, co se setkáte s flush, ale stále je to v transakci.flush() MUSÍ být uzavřen v kontextu transakce a nemusíte to dělat explicitně, pokud to není potřeba (ve vzácných případech ), když to EntityTransaction.commit() udělá za vás.
Zdroj