전체 글333 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. JPA - 고급맵핑 - 요구사항 분석과 맵핑3 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 실전 예제 아래와 같은 요구사항이 추가되었다고 가정하자. 상품의 종류는 음반, 도서, 영화가 있고 이후 확장가능하다. 모든 데이터는 등록일과 수정일이 있다. 상품의 종류에 음반, 도서, 영화가 있다는것에 대한 요구사항을 UML 로 표현하면 아래와 같다. Album, Book, Movie 객체는 Item 객체를 상속받는다. JPA 로 이러한 상속관계를 맵핑할 떄에는 @Inheritance 어노테이션을 사용한다. 실전이라면 맵핑 전략을 신중하게 고르겠지만 예제이기 때문에 간단하게 SINGLE_TABLE 전략을 이용해보자. 2 번째 요구사항인 모든 엔티티에 등록일과 수정일 컬럼을 추가할 때에는 컬럼을 모두 추가해주지 말고 맵핑 관계만 상속받는 @MappedSu.. 2021. 7. 13. JPA - 고급맵핑 - Multi 테이블 맵핑 - 참조: 자바 ORM 표준 JPA 프로그래밍 - Multi 테이블 맵핑 잘 사용하진 않지만 @SecondaryTable 을 이용하면 하나의 엔티티에 여러 테이블을 맵핑할 수 있다. @Entity @Table(name = "BOARD") @SecondaryTable(name = "BOARD_DETAIL", pkJoinColumns = { @PrimaryKeyJoinColumn(name = "BOARD_DETAIL_ID")}) public class Board { @Id @GeneratedValue @Column(name = "BOARD_ID") private Long id; private String title; @Column(table = "BOARD_DETAIL") private String cont.. 2021. 7. 12. JPA - 고급맵핑 - 조인 테이블 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 조인 테이블 DB 의 테이블 연관관계를 설계하는 방법에는 컬럼을 이용한 조인과 조인 테이블을 사용하는법 2 가지가 존재한다. 위 다이어그램에서 MEMBER 테이블에서 LOCKER 와 연관관계를 맺을 때 LOCKER_ID 조인 컬럼을 이용한다. 만약 회원이 5 명 있을 때 2 명에게만 사물함이 할당되었고 나머지 회원에게는 사물함이 아직 할당되지 않았다면 해당 회원의 LOCKER_ID 컬럼에는 NULL 이 할당되어 있을것이다. FK 에 NULL 이 있다면 INNER JOIN 사용 시 MEMBER 를 인식할 수 없으므로 MEMBER 를 기준으로 사물함 존재유무를 나타내야 한다면 OUTER JOIN 을 이용해야 한다. 위 다이어그램은 MEMBER_LOCKER 조.. 2021. 7. 12. 이전 1 ··· 30 31 32 33 34 35 36 ··· 56 다음