@Entity
public class Member {
// ...
// 지연 로딩 설정: Member 조회 시 Team은 프록시 객체로 설정
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TEAM_ID")
private Team team;
// ...
}
- Member 엔티티 내에서의 Team 과의 관계가 지연 로딩으로 설정되어있음.
- Member 조회시에 Team 은 프록시 객체로 채워짐.
// 지연 로딩을 사용하는 실행 코드 예시
public class SomeService {
public void loadMember(EntityManager em) {
// 회원만 조회하고, 팀은 프록시 객체로 채워짐
Member member = em.find(Member.class, "member1");
// 팀 객체에 실제로 접근하는 시점에 데이터베이스에서 로딩
Team team = member.getTeam();
String teamName = team.getName();
}
}
- team.getName() 을 호출시 DB에서 로딩하여 프록시 객체를 초기화
- 이미 영속성 컨텍스트가 존재하는 엔티티는
- 프록시 대신 실제 엔티티가 사용됨.
영속성 컨텍스트에서 존재하는 엔티티라는 동등성의 비교는 어떤식으로 하게될까?
- 동일성 비교 (Identity)
==
연산자는 객체의 참조를 비교한다.
- 두 객체가 메모리 상에서 같은 주소를 가리키고 있는 확인
- 동등성 비교 (Equality)
- equals()
- 를 통해 두 객체의 내용이 같은지 비교하게된다.
- equals()
- 비교의 기준점은 보통
- 일반적인 영속성 컨텍스트의 관점에서
- 동일성 비교를 한다고 함
- 같은 식별자를 가진 엔티티에 대해
==
비교시true
가 나오게 된다.
- 같은 식별자를 가진 엔티티가 이미 캐싱되어있다면
- 그 캐시된 인스턴스를 반환
- 같은 식별자를 가진 엔티티가 캐시에 없다면
- DB로 부터 엔티티 로드후 캐시에 저장
- 이후 같은 식별자로 요청이 들어오면, 저장된 캐시된 인스턴스 반환
- 일반적인 영속성 컨텍스트의 관점에서
Uploaded by N2T
'자바 > JPA' 카테고리의 다른 글
[JPA] 영속성 컨텍스트, 프록시 객체, 준영속 상태 (0) | 2023.11.04 |
---|---|
[JPA] 지연 로딩과 프록시의 활용 (0) | 2023.11.04 |
[JPA] 지연 로딩과 즉시 로딩 .. 무엇을 사용해야하나 (0) | 2023.11.04 |
JPA 고급 매핑 (0) | 2023.11.04 |
[4단원] DDL 생성 기능 (0) | 2023.11.04 |