SpringBoot with JPA 프로젝트(N:1) 1.Entity 생성

mingki·2022년 2월 7일
0

SpringBoot & JPA

목록 보기
11/26


📚 공부한 책 : 코드로배우는 스프링 부트 웹프로젝트
❤️ github 주소 : https://github.com/qkralswl689/LearnFromCode/tree/main/board2022

1.N:1(다대일) 연관관계

☆ 공부할 내용

  • @ManyToOne 을 이용한 연관관계 설정하는법
  • 연관관계가 없는 상황에서 left(outer)join 처리방법
  • 즉시(Eager)로딩과 지연(Lazy)로딩의 차이와 효율적인 처리방법

2.연관관계와 관계형 DB 설계

PK(주키,Primary Key)와 FK(외래키,Foreign Key)를 어떻게 설정해 사용하는가 가 가장중요하다

  • ex)
    - 한 명의 회원은 여러 게시글을 작성할 수 있다
    - 하나의 게시글을 한 명의 회원에 의해 작성된다

3.PK로 설계,FK로 연관관계 해석

JPA를 이용해 연관관계를 해석할 때는 PK를 기준으로 잡고 DB를 모델링 하는 방식으로 구성한다

4.Entity 생성

연관관계의 설정은 처음부터 설정하는 방식 보다 엔티티 클래스들을 구성후 각 엔티티 클래스의 견관관계를 설정하는 것이 좋다

4-1.Member Entity 생성

Email을 사용자의 아이디 대신 사용할 수 있도록 설정한다

  • Email 주소를 PK로 이용한다
  • DB설계에서도 member 테이블은 PK만을 가지고 FK를 사용하지 않으므로 별도의 참조가 필요하지 않다
import lombok.*;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class Member extends BaseEntity{

    @Id
    private String email;

    private String password;

    private String name;
}

4-2. Board Entity 생성

Member 의 이메일(PK)을 FK로 참조하는 구조 BUT 우선 연관관계 작성하지 않고 순수하게 작성한다


import lombok.*;
import javax.persistence.*;

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class Board extends BaseEntity{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long bno;

    private String title;

    private String content;

 	// 작성자 아직 처리안함

}

4-3. Reply Entity 생성

회원이 아닌 사람도 댓글을 남길 수 있다고 가정하고 Board와 연관관계를 맺지 않은 상태로 처리한다


import lombok.*;
import javax.persistence.*;

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class Reply extends BaseEntity{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long rno;

    private String text;

    private String replyer;

	// Board와 연관관계 아직 작성하지 않음
}
profile
비전공초보개발자

0개의 댓글