[SpringBoot] MovieReviewProj - 2. Entity 작성

SeonJin·2023년 9월 12일
0

Springboot

목록 보기
4/5
post-custom-banner

1. BaseEntity

@MappedSuperclass
@EntityListeners(value = {AuditingEntityListener.class})
@Getter
public class BaseEntity {
    @CreatedDate
    @Column(name = "regdate", updatable = false)
    private LocalDateTime regDate;

    @LastModifiedDate
    @Column(name = "moddate")
    private LocalDateTime modDate;
}
// Application class에 @EnableJpaAuditing 추가

@EnableJpaAuditing : 생성일자, 수정일자 자동으로 등록


2. Movie Entity

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class Movie {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long mno; // movie 번호
    private String title; // 제목
}

3. MovieImage

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString(exclude = "movie") // movie entity와 연관관계를 가짐을 명시
public class MovieImage {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long inum; // image 번호
    private String uuid;
    private String imaName;
    private String path;
    
    // M:1 (Lazy Fetch 진행)
    @ManyToOne(fetch = FetchType.LAZY)
    private Movie movie;
}

4. Member

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
@Table(name = "m_member")
public class Member extends BaseEntity{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long mid;
    private String email;
    private String pw;
    private String nickname;
}

5. Review

  • 매핑테이블은 '동사'나 '히스토리'를 의미하는 테이블이다
  • 이 프로젝트에서는 '회원이 영화에 평점을 준다'에서 '평점을 준다'의 역할을 하는 것이 Review Entity이다
  • ManyToMany를 사용하는 경우에 두 엔티티간의 관계 설정은 가증하지만, 추가적인 데이터 기록이 불가능하다
  • Mapping Table을 사용하여 관계 설정과 데이터 기록을 할 수 있다
  • Mapping Table은 두 Entity의 PK를 참조하는 형태로 구성한다

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString (exclude = {"movie", "m_member"})
public class Review extends BaseEntity{
    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    private Long reviewnum;
    
    @ManyToOne(fetch = FetchType.LAZY)
    private Movie movie; // Movie Entity와 일대다 관계
    
    @ManyToOne(fetch = FetchType.LAZY)
    private Member member; // Member Entity와 일대다 관계
    
    private int grade;
    
    private String text;
}
profile
study notebook
post-custom-banner

0개의 댓글