하이버네이트(Hibernate)는 JPA(Java Persistence API)의 구현체 중 하나로, 데이터베이스와 자바 객체 간의 매핑 및 관리를 제공합니다. 하이버네이트의 플러시(flush) 동작은 다음과 같은 순서로 발생합니다.
Inserts, in the order they were performed
Insert 쿼리는 JPA에서 엔터티를 저장(persist)할 때 발생합니다.
하이버네이트는 엔터티가 저장된 순서대로 데이터베이스에 Insert 쿼리를 전송합니다.
Updates
Update 쿼리는 JPA에서 관리 중인 엔터티의 상태가 변경되면 발생합니다.
변경된 엔터티의 상태는 플러시가 발생할 때 데이터베이스에 동기화됩니다.
Deletion of collection elements
컬렉션(예: OneToMany, ManyToMany) 요소를 삭제할 때 해당 요소에 대한 삭제 쿼리가 발생합니다.
컬렉션의 요소를 삭제한 후에 플러시가 발생하면 삭제 쿼리가 실행됩니다.
Insertion of collection elements
컬렉션에 새로운 요소를 추가하면 해당 요소에 대한 Insert 쿼리가 발생합니다.
플러시가 발생하면 컬렉션에 추가된 요소가 데이터베이스에 삽입됩니다.
Deletes, in the order they were performed
Delete 쿼리는 JPA에서 엔터티를 삭제(remove)할 때 발생합니다.
엔터티를 삭제한 후에 플러시가 발생하면 삭제 쿼리가 실행됩니다.
하이버네이트는 트랜잭션 커밋(commit) 시에도 플러시가 자동으로 발생하며, 이때 위의 순서에 따라 변경 내용이 데이터베이스에 반영됩니다. 하이버네이트의 플러시 동작은 JPA 표준을 따르면서도 특정한 최적화 및 설정에 따라 세부적인 동작이 달라질 수 있으므로, 실제 동작을 확인하기 위해서는 구체적인 상황과 설정을 고려해야 합니다.