728x90
반응형
동일성 보장
영속성 컨텍스트의 이점 두번째는 영속 엔티티의 동일성을 보장해 준다는 것.
동일성 보장을 공부하기에 앞서 동일성에 대해 알아보자.
동일성
동일성이란 서로 다른 두 객체 인스턴스가 완전히 같은 값을 갖는 경우를 의미한다.
변수가 참조하는 두 객체의 주소값이 같기 때문에 사실상 하나의 객체로 봐도 무방하다.
두 객체가 동일한지는 '==' 연산자를 통해 판별할 수 있다.
동일성 보장 예제
Member member1 = em.find(Member.class, 1L);
Member member2 = em.find(Member.class, 1L);
System.out.println("member 1 == member2? " + (member1 == member2));
tx.commit();
결과
Hibernate:
select
member0_.id as id1_0_0_,
member0_.name as name2_0_0_
from
Member member0_
where
member0_.id=?
member 1 == member2? true
예제 코드 실행 결과 true가 나와 두 객체의 동일성이 보장 됨을 알 수 있다.
영속 엔티티의 동일성 보장이 가능한 이유는 1차 캐시에 있다. 앞 글에서 다뤘듯 DB 조회 시 가져온 엔티티는 1차 캐시에 저장하고, 이후 다시 조회 할 때 1차캐시에서 저장된 엔티티를 가져온다.
따라서 두 객체는 동일성이 보장 될 수 밖에 없다.
동일성 보장의 이점
1차 캐시로 반복가능한 읽기(Repeatable read) 등급의 트랜잭션 격리 수준을 애플리케이션 차원에서 제공 가능하다.
즉, 트랜잭션 레벨이 Read Commited여도 1차 캐시를 이용해 Repeatable read 등급의 이점을 챙길 수 있는 것.
728x90
반응형
'JAVA' 카테고리의 다른 글
[JPA] JPA 다양한 연관관계 매핑 - 일대다 관계(1:N) (1) | 2024.01.14 |
---|---|
[JPA] 영속성 컨텍스트의 이점 - 1차 캐시 (1) | 2024.01.10 |
[JPA] 엔티티의 생명주기 - 영속, 비영속, 준영속, 삭제 (0) | 2024.01.10 |
[JPA] 엔티티 매핑 - 기본 키 매핑 (0) | 2024.01.06 |
[JPA] JPA 필드와 컬럼 매핑 (0) | 2024.01.05 |