영속성 관리
🫠영속성 관리(5) - 엔티티 조회와 동일성 보장
개발하는 정복자
2022. 5. 29. 00:20
이전 챕터
저번 시간의 영속성 관리(4) - 엔티티 조회와 1차캐시를 충분히 이해하면 이 글을 읽는게 수월할 것이다.
저자 김영한의 자바 ORM 표준 JPA 프로그래밍📚을 참고했다.
영속성 관리(4) - 엔티티 조회와 1차캐시
이전 챕터 저번 시간의 🤑영속성 관리(3) - 영속성 컨텍스트의 특징 를 충분히 이해하면 이 글을 읽는게 수월할 것이다.저자 김영한의 자바 ORM 표준 JPA 프로그래밍 📚을 참고했다. 🗄1차
phillnam.tistory.com
동일성 보장이란?
이전 포스트에서 다뤘던 find() 메소드에서 같은 객체를 지정하여 호출했다면 여러번 호출하여도 영속성 컨텍스트는 1차캐시 내부에 있는 동일한 *인스턴스를 반환한다.
CODE 🧑🏿💻!
@PersisContext
private EntityManager em;
// class @Id(식별자 값)
Member m1 = em.find(Member.class, "member1");
Member m2 = em.find(Member.class, "member2");
// 동일성 비교
if(m1 == m2) System.out.println("True");
else System.out.println("False");
위 코드의 실행 결과는 "True" 일까 "False"일까?
정답은 Ture, 이유는 동일성 때문이다.
같은 값을 여러번 조회를 해도 영속성 컨텍스트는 1차캐시에서 같은 *인스턴스를 반환한다.
! 주의 !
인스턴스와 객체의 차이
동일성과 동등성
동일성(identity) : 실제 인스턴스가 같다. 참조 값을 비교하는 == 비교의 값이 같다.
동등성(equality) : 실제 인스턴스는 다를 수 있지만 인스턴스가 가지고 있는 값이 같다. 동등성 비교는 자바의 equals() 메소드를 사용해야한다.