inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

프록시

10:40에 id값이 어떻게 1이 나오는건가요?

해결된 질문

250

lch9502

작성한 질문수 34

0

안녕하세요!

다른 분들도 이 부분에 대해서 질문을 하셨고 답변을 봤지만, 여전히 이해가 안돼서 다시 한번 질문을 드립니다. ㅠㅠ

 

1    em.persist(member) ;
2
3    em.flush();
4    em.clear();
5
6    em.getReference(Member.class, member.getId());
7
8    System.out.println("findMember.id = " + findMember.getId());

em.clear()를 하면 1차 캐시가 전부 비워지고, GeneratedValue로 생성된 id값은 DB에 저장되어 있습니다.

em.getReference(id)를 하는 시점에 가짜 프록시 객체가 영속성 컨텍스트에서 관리가 된다고 하셨는데,

여기서 가짜 프록시 객체는 id값을 어떻게 1로 가지고 있는 건가요?? 결국 1이라는 값을 알기 위해서는  DB에서 가져와야 하는게 아닌가요??

 

아니라면 혹시 자동으로 SEQUENCE 전략으로 변경되어 메모리에 디폴트로 50까지 가지고 있기 때문에 1을 출력해주는 것일까요?

java JPA

답변 1

2

David

안녕하세요. lch9502님, 공식 서포터즈 David입니다.

.
member를 저장하는 과정에서 생성된 id는 member 객체로 전달되어 member 객체의 id 변수에 할당됩니다.

getReference할 때 member.id가 전달되고 프록시 객체는 내부적으로 id를 가지고 있는 상태가 됩니다.
.
감사합니다.

0

lch9502

답변 감사합니다!

그렇다면 설명해주신게

1. persist할 때 시퀀스 오브젝트에서 순번을 받아온다.

2. 이 때  내부적으로 영속성 컨텍스트와 member 객체에 넣어준다.

3. 그래서 member.getId()로 가져올 수 있고 getReference할 때 id를 전달 받는다.

이렇게 동작을 한다고 이해하면 될까요??

0

David

네, 맞습니다.

0

lch9502

항상 빠른 답변 감사합니다!!

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

54

2

inheritance startegy 선택시 고려사항

0

35

1

Entity 동등성 비교

0

38

1

실무 조언 관련 질문입니다.

0

64

1

H2데이터베이스 파일 생성

0

76

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

66

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

62

1

JPQL 메소드와 락

0

62

1

Delivery @OneToOne

0

69

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

104

2

UnsupportedOperationException 발생

0

97

3

H2 Database 연결이 안됩니다.

0

101

2

연관관계 매핑 질문드립니다.

0

93

2

h2데이터베이스 실행오류

0

114

2

persistence.xml

0

119

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

87

1

영속성 컨텍스트

0

74

1

JPA 프록시

0

105

1

Native Query와 MyBatis

0

81

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

97

1

임베디드 타입 예시 코드 관련 질문

0

125

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

100

3

인텔리제이 패키지 커서 단축키 질문

0

112

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

151

1