flush는 단순히 지연SQL저장소에 모인 쿼리를 데이터베이스에 보내는 것이고,
commit은 그것과 더불어서 commit을 하는것이다.
commit이라는 것은 "commit문"의 깃발을 꽂는다고 생각하면 된다. "이게 내가 한거야!!" 하면서 단계를 표시해두는 역할도 한다는 말임
따라서 commit() = flush + commit 인거다!!
JPQL이란
만약 엔티티를 생성하고 그것을 영속 상태로 만들었다.
영속상태인 엔티티들은 flush되기 전에는 데이터베이스에 반영되지 않는다.
이상태에서 만약 직접 데이터베이스에 쿼리를 날리는 JPQL을 실행하면 영속상태인 엔티티는 반영이 되어있지 않아 조회가 되지 않는다.
JPA는 이런 문제를 예방하기 위해서 JPQL을 실행할 때도 플러쉬를 자동 호출 한다.
그럼 이런 플러시를 자동으로 해주는것 말고 내가 손수 하고 싶다면?
엔티티 매니저의 javax.persistence.FlushModeType을 사용해서 플러시 모드를 직접 지정하면 된다.
참고자료: 김영한. [자바 ORM표준 JPA 프로그래밍],2015
| 연관 관계(OneToMany, ManyToOne) (0) | 2024.06.01 |
|---|---|
| JPA에서 Cascade Type을 지정하지 않으면? (0) | 2024.06.01 |
| [JPA/Hibernate]엔티티 수정/ 변경감지(Dirty Checking) (0) | 2024.05.30 |
| [JPA]엔티티 등록/ 지연등록(transactional write-behind) (0) | 2024.05.30 |
| 영속성 컨텍스트의 엔티티 조회!! (0) | 2024.05.27 |