티스토리 뷰
1차캐시
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");
// 1차 캐시에 저장됨
em.persist(member);
// 1차 캐시에서 조회
Member findMember = em.find(Member.class, "member1");
- find 를 사용하여 데이터 조회 시 데이터베이스를 먼저 찾는것이 아닌 1차 캐시를 먼저 조회해서 데이터를 찾음
Member findMember2 = em.find(Member.class, "member2");
영속 엔티티의 동일성 보장
- 1차 캐시로 반복 가능한 읽기 등급의 트랜잭션 격리 수준을 데이터베이스가 아닌 애플리케이션 차원에서 제공
엔티티 등록 - 트랜잭션을 지원하는 쓰기지연
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
// 엔티티 매니저는 데이터 변경 시 트랜잭션을 시작하여야 함
transaction.begin();
em.persist(memberA);
em.persist(memberB);
// 여기까지 insert sql을 데이터베이스에 보내지 않음
// 커밋하는 순간 데이터베이스에 insert sql을 보낸다
transaction.commit();
- 트랜잭션이 커밋되면 쓰기지연 SQL 저장소에 있는 insert 문이 flush 되면서 데이터베이스에 데이터가 저장되고 커밋됨
엔티티 수정 - 변경 감지
Member memberA = em.find(Member.class, "memberA");
memberA.setUsername("hi");
memberA.setAge(10);
// em.update(memberA) 와 같은 코드가 있어야 할 것 같지만 필요 없음
transaction.commit(); // 트랜잭션 커밋
- 엔티티와 스냅샷을 비교함
- 스냅샷은 최초로 데이터가 들어온 상태
플러시
- 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것
- 변경감지
- 수정된 엔티티를 쓰기 지연 SQL 저장소에 등록
- 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리)
- 영속성 컨텍스트를 비우는 것이 아닌 컨텍스트의 변경 내용을 데이터베이스에 동기화 하는 과정이다
영속성 컨텍스트를 플러시 하는 방법
- em.flush()
- 트랜잭션 커밋
- JPQL 쿼리 실행
준영속 상태
- 영속상태의 엔티티가 영속성 컨텍스트에서 분리되는 상태(detached)
- dirty checking 을 사용할 수 없음
준영속 상태로 만드는 방법
- em.detach(entity)
- em.clear() : 영속성 컨텍스트 초기화
- em.close() : 영속성 컨텍스트 종료
'JPA' 카테고리의 다른 글
[JPA] 실전예제 1~2 (0) | 2023.07.29 |
---|---|
[JPA] 기본키 매핑 (0) | 2023.07.29 |
[JPA] 엔티티 매핑 (0) | 2023.07.09 |
[JPA] 영속성 컨텍스트 (0) | 2023.07.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- CodeDeploy
- TCP
- AWS
- 기술면접
- 파일업로드설정
- JPA
- OS
- ddl-auto
- ORA-27125
- db
- 운영체제
- SpringSecurity
- Oracle
- SpringGraphQL
- nginx
- level0
- 네이버클라우드
- Travis CI
- N+1
- ci/cd
- 트랜잭션격리성
- 인덱스
- 프로그래머스
- 람다식
- Java
- spring
- graphql
- 트랜잭션
- EC2
- Til
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
글 보관함