본문 바로가기

지연3

JPA - 지연 로딩 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 지연 로딩 사내 주문 관리 시스템을 개발한다고 가정해보자. 요구사항은 아래와 같다. 회원은 팀 하나에만 속할 수 있다. 회원은 여러 주문내역을 가진다. 주문내역은 상품정보를 가진다. 이를 UML 다이어그램에서 다중성을 표시하면 위와 같다. 연관 엔티티를 로딩할 때 즉시냐 지연이냐를 결정하는것은 비즈니스 로직을 고려해야 한다. 비즈니스 로직이 아래와 같은 특성을 갖는다고 가정해보자. Member 와 Team 은 자주 함께 사용되었다. Member 과 연관된 Order 는 가끔 사용되었다. Order 와 연관된 Product 는 자주 함께 사용되었다. @Entity public class Member { @Id @Column(name = "USER_ID") .. 2021. 7. 16.
JPA - 즉시 로딩과 지연 로딩 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 즉시 로딩과 지연 로딩 이전에 살펴본 프록시 객체는 주로 연관된 엔티티를 지연 로딩할 때 사용한다. Member member = em.find(Member.class, 2L); Team team = member.getTeam(); System.out.println(team.getName()); 위와 같이 회원이 팀에 소속되어 있다고 가정해보자. 이때 회원 엔티티 조회시 팀까지 한꺼번에 하는게 좋을까? 아니면 팀 엔티티를 실제 사용시할때까지 조회를 미루는것이 좋을까? JPA 는 이 두 가지 방식을 모두 지원한다. 즉시 로딩: 엔티티를 조회할 때 연관된 엔티티도 함께 조회한다. @ManyToOne(fetch = FetchType.EAGER) 로 설정할 수 있.. 2021. 7. 15.
JPA - 프록시 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 프록시와 즉시로딩, 지연로딩 객체가 데이터베이스에 저장되어있으면 연관된 객체를 탐색하기 난해하다. JPA 구현체들은 이런 문제 해결을 위해 프록시를 이용한다. 프록시를 이용하면 실제 이용하는 시점에 데이터베이스에서 조회할 수 있다. JPA 에서는 즉시로딩 혹은 지연로딩으로 시점을 정할 수 있다. - 프록시 엔티티를 사용할 때 연관된 엔티티의 사용 유무는 비즈니스 로직에 따라 다르다. @Entity public class Member { @Id @GeneratedValue @Column(name = "USER_ID") private Long id; private String userName; @ManyToOne @JoinColumn(name = "TEAM_.. 2021. 7. 14.