시그마 삽질==six 시그마

JPA -프록시와 연관관계 관리 본문

프로그래밍/JPA

JPA -프록시와 연관관계 관리

Ethan Matthew Hunt 2020. 4. 9. 22:01
우아한 형제들의 김영한 팀장님의 '자바 ORM 표준 JPA 프로그래밍'을

구입하시길 강력 추천드립니다.

책 구입을 원하시는분은 요기를 클릭하시면 됩니다.

저자 직강 인프런 강의도 있습니다 궁금하신분은 요기를 클릭

하단의 내용은 제가 예전에 읽었던 내용을 요약 정리한 것입니다.

-프록시 객체

실제 Entity 대신 DB 조회를 지연시키는 가짜객체

프록시 객체는 원본 엔티티를 상속받은 객체

실제 객체에대한 참조를 보관

클래스명 출력시 ...javassist..하면 프록시 객체임

 

 

1. 즉시로딩 fetch=FetchType.EAGER

 

연관된 Entity 즉시 조회

JPA는 즉시로딩을 최적화하기위해 가능하면 조인쿼리를 사용한다

@ManyToOne, @OneToOne은 즉시로딩이 default <---명시적으로 지연로딩으로 변경하라!

(optional=false:내부조인)

(optional=true: 외부조인)

외래키에 null값 허용시 외부조인함(성능낮아짐).

DB만 not null할게 아니라 JPA에서 내부조인 사용하려면 nullable=false 설정 or optional=false 설정하면됨

 

@OneToMany, @ManyToMany

컬랙션 즉시로딩은 항상 외부 조인을 사용한다

(optional=false:외부조인)

(optional=true: 외부조인)

2. 지연로딩 fetch=FetchType.LAZY

 

연관 Entity를 프록시로 조회.프록시를 실제 사용할때 초기화하면서 DB 조회

@OneToMany, @ManyToMany은 지연로딩이 default

 

 

(optional=false:외부조인)

(optional=true: 외부조인)

결론:모든 연관관계에 지연로딩을 사용하자!!!  꼭 필요시에만 즉시 로딩을 사용하자!

 

 

3.영속성 전이:CASCADE

 

Entity 영속 상태로 만들때 연관된 Entity도 영속상태 만들기 원할때 사용

CascadeType.PERSIST ->부모 저장시 자식도 저장됨

CascadeType.REMOVE ->부모 삭제시 자식도 삭제됨

orphanRemoval=true : 부모 삭제시 자식도 삭제 @OneToOne, @OneToMany만 사용가능

'프로그래밍 > JPA' 카테고리의 다른 글

JPA -객체 지향 쿼리언어  (0) 2020.04.09
JPA -값 타입  (0) 2020.04.09
JPA -고급 매핑  (0) 2020.04.09
JPA -다양한 연관관계 매핑  (0) 2020.04.09
JPA -연관관계 매핑  (1) 2020.04.08
Comments