@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;
}
public enum MemberType {
CITIZEN, CANDIDATE, RESEARCHER
}
@Entity
@Getter
public class City {
@Id @GeneratedValue
@Column(name = "city_id")
private Long id;
@Embedded
private District district;
}
@Embeddable
@Getter
public class District {
private String SGG_1;
private String SGG_2;
private String SGG_3;
}
@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;
}
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;
}
@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;
}
@Entity
@DiscriminatorValue("F")
@Getter
public class Facebook extends Sns{
private int likes;
private int comments;
private int shares;
}
Instagram, Twitter 엔티티는 생략하겠습니다.
@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;
}
@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;
}
@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;
}