Spring/JPA 20

Mapped Superclass - 매핑 정보 상속 / 상속관계 매핑

BaseEntity 클래스를 만들어보자. 추상클래스로 쓰자. @MappedSuperclass public abstract class BaseEntity { package hellojpa; import javax.persistence.MappedSuperclass; import java.time.LocalDateTime; @MappedSuperclass public class BaseEntity { private String createdBy; private LocalDateTime createdDate; private String lastModifiedBy; private LocalDateTime lastModifiedDate; public String getCreatedBy() { return crea..

Spring/JPA 2022.05.28

실전 예제 3 - 다양한 연관관계 매핑

배송, 카테고리 추가 - 엔티티와 ERD를 보자. Delivery 및 Category Class를 만들어주자. package jpabook.jpashop.domain; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Delivery { @Id @GeneratedValue private Long id; private String city; private String street; private String zipcode; private DeliveryStatus status; } Order와 Delivery의 관계를 1대1로 잡아준다...

Spring/JPA 2022.05.25

일대일 1:1 / 다대다 N:M

일대일 관계 일대일 관계는 반대도 일대일이다. 주 테이블이나 대상 테이블 중에 외래 키 선택 가능 주 테이블에 왜래 키 대상 테이블에 외래 키 외래 키에 DB 유니크(UNI) 제약조건 추가 다대일(@ManyToOne) 단방향 매핑과 유사하다. Locker를 만들어주자. package hellojpa; import javax.persistence.GeneratedValue; import javax.persistence.Id; public class Locker { @Id @GeneratedValue private Long id; private String name; } Member Class에도 설정을 해주고 돌리면 Locker_ID와 Member Class가 생성이 된다. @OneToOne @JoinCo..

Spring/JPA 2022.05.25

다대일 N:1 / 일대다 1:N

연관관계 매핑시 고려사항 3가지 다대일[N:1] 일대다[1:N] 일대일[1:1] 다대다[N:M] 다양한 연관관계 매핑 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A -> B, B->A 처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음. 둘중 테이블의 외래 키를 관리할 곳을 지정해야 함 연관관계의 주인: 외래 키를 관리하는 참조 주인의 반대편: 외래 키에 영향을 주지 않음, 단순 조회만 가능 다대일(N:1)부터 보자. 외래키가 있는 곳에 참조를 걸고 매핑을 하면되는 그림이다. 다대일 단방향 관계는 아래..

Spring/JPA 2022.05.25

예제 - 연관관계 매핑 시작

연관관계 매핑의 객체 구조는 이렇다. MEMBER와 ORDER와의 관계에서는 MEMBER_ID만(FK) 잘 매핑해주면 된다. 연관관계 매핑을 해주자. @Entity @Table(name = "ORDERS") public class Order { @Id @GeneratedValue @Column(name = "ORDER_ID") private Long id; // @Column(name = "MEMBER_ID") // private Long memberId; @ManyToOne @JoinColumn(name = "MEMBER_ID") private Member member; private LocalDateTime orderDate; @Enumerated(EnumType.STRING) private Orde..

Spring/JPA 2022.05.25

양방향 연관관계와 연관관계의 주인

아래 코드를 보게 되면 member에서 Team으로는 갈 수 있다. 반대로 team에서 getMember()는 안된다. 일단 왔다갔다 참조는 할 수 있다. => 양방향 연관관계 // ex1-hello-jpa / hellojpa / JpaMain // 저장 Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("member1"); // 이렇게 해주면 JPA가 알아서 PK값을 team에서 꺼내서 FK값에 insert해준다. member.setTeam(team); em.persist(member); em.flush(); em.clear(); Member find..

Spring/JPA 2022.05.08

연관관계 매핑 기초 - 단방향 연관관계

단방향 연관관계에 대해서 살펴보자. 객체와 테이블 연관관계의 차이를 이해하는거에 집중 객체의 참조와 테이블의 외래 키를 매핑 용어 방향(Direction): 단방향, 양방향 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 연관관계의 주인: 객체 양방향 연관관계는 관리가 필요하다. 진행하려는 예제 시나리오를 살펴보면 회원과 팀이 있고 회원은 하나의 팀에만 소속될 수 있고 회원과 팀은 다대일 관계(N:1) 아래 매핑관계를 보면 TEAM_ID(FK)값이 MEMBER에 속해있다. 즉 MEMBER가 다대일에서 다이고(N) TEAM이 다대일에서 일이다.(1) Member Class를 작성 package hellojpa; import javax.persis..

Spring/JPA 2022.04.16

실전 예제 1 - 요구사항 분석과 기본 매핑

아래 요구사항을 가지고 간단한 쇼핑몰 예제를 만들어 보자. 회원과 주문의 1대다 관계 주문과 주문상품의 관계 1대다 주문상품과 상품의 관계 다대일 테이블 설계와 엔티티 설계 매핑 그림은 아래와 같다. 엔티티 설계와 매핑 예시를 코드로 구현해보자. maven으로 새로운 프로젝트를 생성해준다. 폴더구조에서 persistence.xml을 만들어 주고 설정을 해준다. Member Order OrderItem Item Class를 각각 만들어준다. Member Class에서 Id 식별자는 필수로 해준다. getter setter을 만들어 준다.(setter는 많이 만들면 코드 추적하기가 어렵고 유지보수성에서 떨어진다.) package jpabook.jpashop.domain; import javax.persist..

Spring/JPA 2022.04.14

기본 키 매핑

Member class 이렇게 해서 시작해보자. @Entity public class Member { @Id private Long id; @Column(name = "name", nullable = false) private String username; public Member() { } } 사용할 수 있는 Annotation은 크게 두 가지가 있다. @Id @GeneratedValue 기본 키 매핑 방법 직접 할당: @Id만 사용 자동 생성(@GeneratedValue) id를 string으로 해놓고 id를 직접 할당한다 그러면 아래와 같이 작성 // Member class package hellojpa; import javax.persistence.*; @Entity public class Mem..

Spring/JPA 2022.04.14