강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

katastrophe님의 프로필 이미지
katastrophe

작성한 질문수

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

준영속 상태

영속성 컨텍스트 질문입니다.

해결된 질문

작성

·

177

1

안녕하세요 강사님! 강의듣다가 clear보고 궁금한게 있어서 질문드립니다.

아래 사진과같이 만약 DB에 1이라는 키 값을 가진 member를 em.find를 한 뒤

em.clear를 해서 영속성컨텍스트 비우고나서 다시

em.find를 통해 member2라는 객체를 만들었을때 member는 영속성컨텍스트가 관리하는 객체가 아닌데도 왜 member==member2 가 성립하는지요 ?

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. katastrophe님

출력 결과를 확인해보시겠어요? true, false?

테스트에서는 assert...를 사용하셔야 합니다^^

katastrophe님의 프로필 이미지
katastrophe
질문자

제가 알기론 객체끼리의 ==연산자는 같은 참조일 경우 true 를 반환하는 것으로 알고있습니다.

assertEquals 로 테스트한 결과 또한 member 랑 member2랑 같다고 나왔습니다.

김영한님의 프로필 이미지
김영한
지식공유자

다음을 확인해주세요.

1. member == member2 출력 결과가 true, false 중에 어떤 것인가요?

2. Member 객체에 혹시 @Data가 정의되어 있나요? 이 경우 assertEquals는 객체 참조가 아니라 데이터를 비교하게 됩니다. assertSame을 사용해보시겠어요?

3. member 객체가 DB에서 실제 조회가 되나요? 혹시 데이터가 없어서 null이 아닌가요?

katastrophe님의 프로필 이미지
katastrophe
질문자

아아 .. 다시 해보니 false나오고 Euqal 이나 Same도 통과안됩니다 !! 다른 객체 참조를 가르키고있네요!  그 전에 통과된 이유는 없는 값을 가르키고 있어서 그런것 같습니다..!

결론은 같은 Id값을 가지고 있는 객체라도 EntityManager에서 관리하는 객체가 아니게 된 순간

다른 참조값을 가져버리게 되는것이 맞는 것 같습니다.

김영한님의 프로필 이미지
김영한
지식공유자

네^^

katastrophe님의 프로필 이미지
katastrophe

작성한 질문수

질문하기