📚 공부한 책 : 코드로배우는 스프링 부트 웹프로젝트
❤️ github 주소 : https://github.com/qkralswl689/LearnFromCode/tree/main/board2022
☆ 공부할 내용
- @ManyToOne 을 이용한 연관관계 설정하는법
- 연관관계가 없는 상황에서 left(outer)join 처리방법
- 즉시(Eager)로딩과 지연(Lazy)로딩의 차이와 효율적인 처리방법
PK(주키,Primary Key)와 FK(외래키,Foreign Key)를 어떻게 설정해 사용하는가 가 가장중요하다
- ex)
- 한 명의 회원은 여러 게시글을 작성할 수 있다
- 하나의 게시글을 한 명의 회원에 의해 작성된다
JPA를 이용해 연관관계를 해석할 때는 PK를 기준으로 잡고 DB를 모델링 하는 방식으로 구성한다
연관관계의 설정은 처음부터 설정하는 방식 보다 엔티티 클래스들을 구성후 각 엔티티 클래스의 견관관계를 설정하는 것이 좋다
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;
}
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;
// 작성자 아직 처리안함
}
회원이 아닌 사람도 댓글을 남길 수 있다고 가정하고 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와 연관관계 아직 작성하지 않음
}