inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

프록시

하이버네이트 프록시 참조 가능

해결된 질문

315

DolphaGo

작성한 질문수 6

1

https://www.inflearn.com/questions/53733

우선 위의 글을 읽고 왔습니다.

트랜잭션을 종료하지 않은 상태에서 em을 닫았기 때문에 아직 트랜잭션이 살아있어서 값이 잘 불러와진다고 하셨습니다.

제 build.gradle의 하이버네이트 버전은 다음과 같이 설정되어있습니다. 

그리고 제가 다음과 같이 코드를 작성했습니다.

그런데도 여전히 값이 잘 불러와집니다. 이 부분은 어떻게 이해해야 하나요?(하이버네이트 버전을 5.4.0으로 해도 값이 잘 참조가 되더라구요.)

java JPA

답변 3

2

김영한

안녕하세요. DolphaGo님 좋은 질문입니다.

아마 코드 상위에 해당 엔티티를 저장했거나, 또는 이미 한번 조회해서 그럴꺼에요^^

영속성 컨텍스트에 이미 영속상태로 관리되고 있는 엔티티를 프록시로 조회하면, 프록시로 반환할 이유가 없기 때문에(+영속성 컨텍스트의 동일성 보장) 기존 영속성 컨텍스트에서 관리중인 엔티티를 반환해줍니다.

조회한 프록시 객체를 다음과 같이 출력해보시면

System.out.println("ref = " + ref.getClass());

class hellojpa.Member -> 이런식으로 해당 엔티티 클래스 명이 정확하면 기존에 관리되면 엔티티가 조회된 것이고,

class hellojpa.Member$HibernateProxy$VYWPiECl -> 이런식으로 프록시 클래스가 사용되면 실제 프록시를 통해서 조회된 것입니다.

감사합니다.

1

김영한

ㅎㅎㅎ 이렇게 예외를 반기는 분이 있다니 ㅎㅎㅎ

즐거운 하루 되세요.

1

DolphaGo

정말 감사합니다 ㅠㅠㅠㅠ
그러게요. 항상 JPA는 프록시든 실제 엔티티든 영속성 컨텍스트가 관리를 하면 타입을 일치시켜준다는 사실을 잠깐 잊고 있었네요.

그래서 말씀하신것처럼 프록시가 아닌 실제 엔티티를 반환하고 있었습니다. 영속성 컨텍스트를 다 비워주고 getReference()를 호출하여 해결했습니다. 데이터 저장과 참조를 Main에서 같이 실험해서 그랬네요. 실제 개발을 할 땐 LazyInitializationException이 왜 발생하는 것인지 몰랐어서 답답했었는데, 이번 강의를 두번 세번 들으면서 프록시에 대한 개념을 잘 잡게 되었습니다. 정말 감사합니다..

제가 그토록 원하던 LazyInitializationException을 봐서 기분이 너무 좋네요 ㅎㅎ..

휴일에도 답변해주셔서 정말 감사합니다.^^

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

0

40

1

H2데이터베이스 파일 생성

0

48

2

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

0

49

2

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

0

46

1

JPQL 메소드와 락

0

49

1

Delivery @OneToOne

0

55

1

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

0

85

2

UnsupportedOperationException 발생

0

80

3

H2 Database 연결이 안됩니다.

0

87

2

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

0

79

2

h2데이터베이스 실행오류

0

103

2

persistence.xml

0

101

2

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

0

76

1

영속성 컨텍스트

0

61

1

JPA 프록시

0

87

1

Native Query와 MyBatis

0

62

1

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

0

81

1

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

0

110

3

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

0

89

3

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

0

104

2

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

0

134

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

67

1

임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.

0

95

1

데이터베이스가 초기화되는 것 같아요

1

173

2