티스토리 뷰

반응형

JPA에서 엔티티를 조회할 때 연관관계를 맺고 있는 다른 엔티티도 같이 조회한다. (@ManyToOne, @OneToMany 등등)


하지만 불필요한 데이터까지 조회하기 때문에 지연로딩 이라는 것을 지원하고 이 때 실제 객체 대신 임의의 객체가 필요한다 이 때 프록시객체를 사용한다.


프록시(대리인 )를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회 할 수 있다. (머루님 블로그)





<컬렉션 래퍼>


하이버네이트는 엔티티를 영속상태로 만들 때(영속성 컨텍스트에 넣을 때) 컬렉션이 있으면 컬렉션을 추적하고 관리할 목적으로 원본 컬렉션을 하이버네이트가 제공하는 내장 컬렉션으로 변경하는데 이것을 컬렉션 래퍼라 한다.


엔티티를 지연로딩하면 프록시 객체를 사용해서 지연로딩을 진행하지만 컬렉션은 컬렉션 래퍼가 지연로딩을 처리해준다.

컬렉션 자체를 호출해도 컬렉션은 초기화 되지 않으며 .get(0)와 같이 컬렉션에서 실제 데이터를 조회할 때 데이터베이스를 조회해서 초기화 해준다.




JPA에서는 즉시로딩과 지연로딩이 있다.



즉시로딩 : 엔티티를 조회 연관된 엔티티도 함께 조회                  FetchType.EAGER


지연로딩 : 엔티티를 조회   연관된 엔티티를 실제 사용할  조회   FetchType.LAZY

 

 

<JPA 기본 페치 전략>


- @ManyToOne, @OneToOne: 즉시로딩(FetchType.EAGER)


- @OneToMany, @ManyToMany : 지연로딩(FetchType.LAZY)

 


 

참고: http://yellowh.tistory.com/126

  https://kihoonkim.github.io/2017/01/27/JPA(Java%20ORM)/4.%20JPA-프록시%20와%20지연로딩/
  http://wonwoo.ml/index.php/post/811


반응형

'BackEnd > Java' 카테고리의 다른 글

HTTP 예외처리  (0) 2018.08.03
java bufferedreader BufferedWriter  (0) 2018.07.20
Java의 다형성  (0) 2018.07.18
Java Collection Framework  (0) 2018.07.17
Annotation이란  (0) 2018.07.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함