728x90
반응형
플러시란?
영속성 컨텍스트의 변경 내용을
데이터베이스에 반영한다.
특징
- 영속성 컨텍스트를 비우지 않음
- 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화
- 트랜잭션이라는 작업 단위가 중요 -> 커밋 직전에만 동기화 하면 됨
플러시발생 시점
- 변경감지
- 수정된 엔티티 쓰기 지연 SQL 저장소 등록시
- 쓰기지연 SQL 저장소의 쿼리를 데이터 베이스에 전송
- 등록, 수정, 삭제 쿼리시
영속성 컨텍스트를 플러시 하는방법
- em.flush(): 수동 호출
EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); Member member = new Member(150L,"A"); // 저장 되진 않는다. em.persist(member); // 그래도 쿼리가 어떻게 나가는지 // 아니면 저장된 데이터를 보고 싶으면 em.flus(); 를 해주면 된다.
- 트랜잭션 커밋: 자동 호출
- JPQL 쿼리실행: 자동 호출
JPQL 쿼리 수행시 자동호출 되는 이유는 다음과 같다.
persist로 여러개의 객체를 영속성에 넘겨준 후
JPQL에서 전체 조회를 하면 member1,2,3 객체들은 DB에 저장되지 않았기 때문에
조회가 안될것이다 그렇기 때문에 JPQL 시 자동으로 flus 가 수행되어 DB에 저장된다.
persist.(member1) persist.(member2) persist.(member3) //중간에 JPQL 실행 query = em.createQuery("select m from Member m", Member.class); List<Member> members= query.getResultList();
참고
https://www.inflearn.com/course/ORM-JPA-Basic/lecture/21695?tab=curriculum&speed=1
728x90
반응형
'DataBase > JPA' 카테고리의 다른 글
[JPA] 엔티티, 테이블, 컬럼 매핑 (0) | 2021.07.30 |
---|---|
[JPA] 준영속성 (0) | 2021.07.30 |
[JPA] 영속성 컨텍스트 (0) | 2021.07.30 |
[JPA] JPA CRUD 기본 (0) | 2021.07.30 |
[JPA] JPA 환경설정 (0) | 2021.07.29 |
댓글