JPA

실전예제 5 - 프록시 및 연관관계

방구석 대학생 2020. 10. 17. 19:45

"인프런 - 자바 ORM 표준 JPA 프로그래밍 강의를 듣고 작성한 글 입니다."

www.inflearn.com/course/ORM-JPA-Basic#

 

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

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다. 초급 웹 개발 프로그

www.inflearn.com

 

앞전에 작성했던 글의 내용과 같이 모든 연관관계를 지연 로딩으로 설정해주자.

- @ManyToOne, @OneToOne 어노테이션은 기본이 즉시 로딩이므로 지연 로딩(LAZY)으로 변경해준다.

 

- Category.java

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PARENT_ID")
private Category parent;

 - Delivery.java

@OneToOne(mappedBy = "delivery", fetch = FetchType.LAZY)
private Order order;

- Order.java

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "MEMBER_ID") // 연관관계 매핑
private Member member;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "DELIVERY_ID")
private Delivery delivery;

- OrderItem.java

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ORDER_ID")
private Order order;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ITEM_ID")
private Item item;

위와 같이 연관관계에 있어 대상 클래스의 객체를 지연 로딩(LAZY) 설정을 통해 프록시 객체로 생성해주면, 해당 클래스의 객체를 직접 사용하는 메소드를 호출하는 것이 아닌 한 테이블을 조인 하는 쿼리가 발생하지 않기 때문에 성능상 이점을 가져갈 수 있게 된다.

 

 

영속성 전이(CASCADE) 를 설정해주자.

- Order -> Delivery, Order -> OrderItem 를 영속성 전이 ALL 설정

- Order.java

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "DELIVERY_ID")
private Delivery delivery;

@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<OrderItem> orderItems = new ArrayList<>();

위와 같은 영속성 전이 설정을 통해 부모 객체가 persist 되어 영속화 될 경우 연관관계로 이어져 있는 자식 클래스의 객체 역시 동시에 영속화 시킬 수 있다.