[ElectionPJT] 2. 엔티티 구현 및 연관관계 매핑

Jake·2022년 3월 16일
0

프로젝트

목록 보기
2/9
  • 생성자 부분은 일단 빼고 구현
  • 연관관계 매핑은 일단 전부 단방향으로 구현 (추후 필요하다고 느껴지면 양방향 연관관계 추가 할 수도 있습니다)
회원(Member) 엔티티
@Entity
@Getter
@RequiredArgsConstructor
public class Member {

    @Id @GeneratedValue
    @Column(name = "member_id")
    private Long id;

    private String name;

    private District district;

    @Enumerated(EnumType.STRING)
    private MemberType type;

}
MemberType Enum
public enum MemberType {
    CITIZEN, CANDIDATE, RESEARCHER
}

도시(City) 엔티티
@Entity
@Getter
public class City {

    @Id @GeneratedValue
    @Column(name = "city_id")
    private Long id;

    @Embedded
    private District district;
}
District 클래스
@Embeddable
@Getter
public class District {

    private String SGG_1;
    private String SGG_2;
    private String SGG_3;

}

후보자(Candidate) 엔티티
@Entity
@Getter
public class Candidate {

    @Id @GeneratedValue
    @Column(name = "candidate_id")
    private Long id;

    private int number;

    @Column(name = "candidate_name")
    private String name;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "city_id")
    private City city;
}

설문조사(Survey) 엔티티
package electionPJT.core.domain;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Entity
@Getter
public class Survey {

    @Id @GeneratedValue
    @Column(name = "survey_id")
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "city_id")
    private City city;

    private LocalDateTime surveyDate;

    private String executor;

    private String requester;
}

SNS 엔티티
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "dtype")
@Getter
public abstract class Sns {

    @Id @GeneratedValue
    @Column(name = "sns_id")
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "candidate_id")
    private Candidate candidate;

    @Column(columnDefinition = "Text")
    private String content;

    private String url;

    private LocalDateTime uploadDate;
}

Facebook 엔티티
@Entity
@DiscriminatorValue("F")
@Getter
public class Facebook extends Sns{

    private int likes;
    private int comments;
    private int shares;

}

Instagram, Twitter 엔티티는 생략하겠습니다.


Youtube 엔티티

@Entity
@Getter
public class Youtube {

    @Id @GeneratedValue
    @Column(name = "youtube_id")
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "candidate_id")
    private Candidate candidate;

    private String url;

    private String thumbnail;

    private LocalDateTime runtime;

    private String description;

    private int views;

    private int comments;

    private LocalDateTime uploadDate;
}

설문조사(Survey) 엔티티
@Entity
@Getter
public class Survey {

    @Id @GeneratedValue
    @Column(name = "survey_id")
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "city_id")
    private City city;

    private LocalDateTime surveyDate;

    private String executor;

    private String requester;
}

Rating(지지율) 엔티티
@Entity
@Getter
public class Rating {

    @Id @GeneratedValue
    @Column(name = "rating_id")
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "survey_id")
    private Survey survey;

    private String name;

    private double rate;

}
profile
Java/Spring Back-End Developer

0개의 댓글