분류 전체보기333 JPA - 고급맵핑 - 슈퍼타입과 서브타입 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 상속 관계 맵핑 관계형 DB(RDB) 는 상속이라는 개념이 없다. 대신 슈퍼타입과 서브타입이라는 유사한 기법이 존재한다. 그래서 ORM 의 상속관계맵핑이라고 하면 객체의 상속과 슈퍼타입 서브타입의 관계를 맵핑하는것을 말한다. 맵핑방법은 아래와 같이 3 가지 방법이 있다. 각각의 테이블 변환: 공통된 속성을 부모 테이블로 두고 달라지는속성을 모두 하위 테이블로 만들어서 조회시 조인을 사용한다. JPA 에서는 조인전략(JOINED)이라고 한다. 통합 테이블로 변환: 테이블을 하나만 사용하여 통합한다. JPA 에서는 단일 테이블 전략(SINGLE_TABLE)이라고 한다. 서브타입 테이블로 변환: 모든 속성을 서브타입마다 하나의 테이블에 둔다. JPA 에서는 구.. 2021. 7. 10. JPA - 다양한 연관관계 - 요구사항 분석과 맵핑 2 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 실전 예제 이전 글 JPA - 엔티티 맵핑 - 요구사항 분석과 맵핑 에 이어서 요구사항 분석을 통해 1 : 1 및 M : N 연관관계 맵핑을 적용해보자. 추가된 요구사항은 아래와 같다. 상품을 주문할 때 배송정보를 입력할 수 있다. 하나의 주문에서는 하나의 배송지로만 배송할 수 있다. 상품을 카테고리로 구분할 수 있다. 아래 다이어그램은 위의 요구사항을 반영하여 UML 을 다시 그린것이다. 이전 UML 과 비교해서 Delivery 와 Category 클래스가 추가되었다. 먼저 Order 와 Delivery 를 살펴보자. 하나의 주문시 하나의 배송지에만 배송할 수 있으므로 둘은 1 대 1 관계이다. 또 주문에서만 배송지 정보를 참조하는게 아니라 배송지 정보.. 2021. 7. 10. JPA - 다양한 연관관계 - M : N 비식별관계 - 참조: 자바 ORM 표준 JPA 프로그래밍 - M : N 연결 엔티티, 비식별 앞에서 M : N 연결 엔티티를 알아보았다. 복합 키를 사용하기 위해 @IdClass 를 추가하고, 식별자 클래스를 지정하였다. 식별자 클래스는 Serializable 을 구현해야하고, equals 와 hashCode 재정의 및 그 외에도 지켜야하는 규약이 있었다. USER_PRODUCT 테이블에서 복합키를 사용했었는데 DB 설계를 해본사람이라면 이를 그대로 사용하지는 않을 것이다. 위의 다이어그램에서 USER_PRODUCT 테이블의 명이 ORDERS 로 변경되었다. 회원이 상품을 몇개 그리고 언제 주문했는지 정보를 추가하면서 비즈니스에서 주문이라는 업무의 성격이 되었기 때문이다. 또 ORDER_ID 를 추가하여 PK 로 .. 2021. 7. 10. JPA - 다양한 연관관계 - M : N 식별관계 - 참조: 자바 ORM 표준 JPA 프로그래밍 - M : N 연결 엔티티 이제 1 : 1, 1 : N, M : N 의 단방향과 양방향을 모두 알아보았으니 도메인 설계만 잘하면 JPA 로 모든 맵핑을 할 수 있을까? 세상 문제가 그렇게 간단하면 좋겠지만 M : N 관계에서 더 살펴볼 사항이 있다. 앞의 글 다양한 연관관계 M : N 의 ER Diagram 과 UML 을 다시 한번 생각해보자. ER Diagram 에 USER 와 PRODUCT 테이블이 있었고, 두 테이블이 서로에 대해 M : N 의 관계라면 외래키를 이용해서 표현할 방법이 없으므로 USER_PRODUCT 조인 테이블도 추가했었다. 반면 객체(UML Digram)에서는 User 와 Product 엔티티를 선언하고 서로 Collection 으로.. 2021. 7. 10. JPA - 다양한 연관관계 - M : N - 참조: 자바 ORM 표준 JPA 프로그래밍 - M : N 관계 회원과 상품이 있다고 가정해보자. 회원은 여러 상품을 주문할 수 있고, 하나의 상품도 여러 회원들에 의해 주문될 수 있다. 이때 다중성의 관계는 M : N 이다. 이를 ER Diagram 으로 나타내면 위와 같다. 그러나 RDB(관계형 DB)는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다. 그래서 조인 테이블을 사용한다. 1 번째 다이어그램에서 USER 와 PRODUCT 의 PK인 USER_ID 와 PRODUCT_ID 로 이루어진 조인테이블 USER_PRODUCT 가 추가되었다. 하지만 객체의 경우에는 서로에 대해 M : N 을 나타낼 때 조인객체를 두지 않는다. 위 다이어그램처럼 다대다 관계에서 회원은 상품을, 상품은 회원을 컬.. 2021. 7. 8. JPA - 다양한 연관관계 - 1 : 1 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 1 : 1 연관관계 1 : 1 관계는 양쪽이 서로 하나씩만 가지는 관계로 아주 심플한 다중성을 갖는다. 회원과 사물함이 있다고 할 때, 회원은 하나의 사물함만 소유할 수 있고 사물함도 회원 한명에 의해서만 소유될 수 있다고 한다면 1 : 1 관계이다. 다중성에서 항상 N 쪽이 외래키를 가진다고 하였는데, 1 : 1 에서는 어느쪽에 외래키를 두어도 되기 때문에 양방향일 경우 연관관계의 주인을 선택해야 한다. 주 테이블 또는 대상 테이블에 외래키를 둘 수 있다. 주 테이블: 주 테이블에 대상 테이블을 참조하는 사상을 그대로 따라가기 때문에 어플리케이션 코드에 더 직관적이다. 대상 테이블: DB 개발자들이 선호하는 방법이며 1 : 1 에서 1 : N 으로 변경.. 2021. 7. 6. JPA - 다양한 연관관계 - N : 1 과 1 : N - 참조: 자바 ORM 표준 JPA 프로그래밍 - 다양한 연관관계 앞에서 몇 가지 예제를 통해 연관관계를 작성해보았다. JPA 에 익숙하지 않다면 JPA를 사용하여 연관관계 코드를 작성하는게 헷갈릴 수 있다. 이때에는 연관관계 맵핑시 고려할 사항을 순차적으로 정해놓고 천천히 생각해보면 좀 더 수월하다. 다중성: N : 1 인지 1 : N 인지에 따라 @ManyToOne, @OneToMany 어떤 다중성 어노테이션을 사용할 지 정한다. 단방향, 양방향: 하나의 엔티티가 다른 엔티티를 참조하는지 서로 참조하는지를 정한다. 연관관계의 주인, 연관관계 편의메소드: 양방향이라면 두 엔티티중 외래키를 관리할 연관관계의 주인과 연관관계 편의메소드 작성을 고려한다. - N : 1 단방향 회원 엔티티와 팀 엔티티가 있다.. 2021. 7. 3. JPA - 연관관계 맵핑 - 연관관계 맵핑 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 외래키에서 참조로의 변환 지난번 요구사항을 Entity 로 변환하는 과정에서 아래 다이어그램과 같이 속성으로 외래키를 그대로 냅두었었다. 연관관계 맵핑을 배웠으니 이 외래키들을 참조로 변환할 수 있다. 연관관계를 더 명확히 보기 위해서 해당 필드에도 다중성을 표시하였다. 아래 설명은 위의 다이어그램에서 클래스간의 관계를 파악한것이다. Member - Order: 멤버는 주문을 1건도 하지 않을 수도, 여러건을 할 수도 있다. 1 : N 의 관계이다. Member 와 Order 는 서로간을 참조하는 양방향 연관관계이다. 외래키는 Order 에서 MEMBER_ID 를 가져야 한다. 앞에서 설명했듯이 Member : Order = 1 : N 이므로 N 쪽에서 .. 2021. 7. 2. JPA - 연관관계 맵핑 - 양방향 연관 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 양방향 연관관계 이전 예제에서는 회원에서 팀으로 접근하는 단방향 연관관계를 알아보았다. 이번에는 팀에서 회원으로 접근할 수 있는 양방향 연관관계를 맵핑해본다. 위 다이어그램에서 회원과 Team은 다대일 연관관계이다. 회원은 아직 팀에 속해있지 않을 수도 있고, 1개팀에 속할수도 있지만 2개 이상팀에는 속할수가 없기 때문에 다중성의 하한과 상한은 0..1이다. 반면 팀은 여러명의 멤버들로 구성될 수 있기 때문에 다중성을 * 이며, Type은 User 이다. DB 입장에서는 달라지는 내용이 전혀 없다. 어차피 외래키 하나로 Join 하면 되기 때문에, 기존의 형상을 유지한다. User 는 이전소스와 달라지는것이 없다. Team 에서 User 를 참조하기 위한.. 2021. 7. 1. JPA - 연관관계 맵핑 - 단방향 연관 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 연관관계 대부분의 엔티티들은 다른 엔티티와 관계가 있다. 주문은 상품과, 상품은 카테고리등 다른 엔티티와 관계를 갖는다. JPA 를 사용시 관계설정의 핵심은 객체 와 DB 가 다른 엔티티들과 관계를 맺을 때 연관방식이 다른다는데에 있다. DB 에서 다른 엔티티를 참조할 때 외래키를 사용하는데 JPA 를 이용하여 어플리케이션에서 어떻게 나타낼지 알아보자. 본격적으로 알아보기전 연관과 관련된 핵심 키워드를 알아본다. 방향: 단방향과 양방향이 있다. 만약 멤버가 주문을 참조하기만 하면 단방향이며, 만약 주문도 멤버를 참조한다면 양방향 관계이다. 다중성: 1:1, 1:N, N:1, M:N 관계를 나타낸다. 만약 어플리케이션에서 "회원은 여러 주문을 할 수 있으며.. 2021. 6. 30. 이전 1 ··· 18 19 20 21 22 23 24 ··· 34 다음