em.persist
Merge the state of the given entity into the current persistence context.
현제 영속성 컨택스트에 주어진 엔티티의 상태를 병합함(넣음,합침,덮음)
em.flush();
Set the flush mode that applies to all objects contained in the persistence context.
영속성 컨텍스트에 포함된 모든 개체에 적용되는 FlushMode로 설정합니다.
em.clear();
Remove the given entity from the persistence context, causing a managed entity to become detached. Unflushed changes made to the entity if any (including removal of the entity), will not be synchronized to the database. Entities which previously referenced the detached entity will continue to reference it.
영속성 컨텍스트에서 엔티티를 제거하여 영속성 컨택스트로 관리되지 않게 분리합니다. 엔티티에 대한 플러시되지 않은 변경 내용(엔티티 제거 포함)이있더라도 데이터베이스에 동기화되지 않습니다. 이전에 분리된 엔티티를 참조하는 엔티티는 계속 참조할 것이다.
FlushMode는 새 엔터티와 기존 엔터티의 변경 사항이 데이터베이스에 기록되는 시기를 정의합니다
Transaction commit 이 일어날 때 flush가 동작
flush가 발생한다고 해서 commit이 이루어지는 것이 아니고 flush 다음에 실제 commit이 일어난다.
flushmode에 대한 설명, flushMode로 인한 commit은 Transaction이 끝날때만 발생하는것은 아니라고하는것 같다.
https://www.youtube.com/watch?v=bLZLs8wQcaQ