졸업프로젝트를 진행하면서 공부한 내용 정리!
Student라는 이름의 entity와 Club이라는 이름의 entity를 매핑한다고 가정한다. Student entity는 한 학생의 개인정보를 담은 entity이고 Club엔티티는 동아리 정보를 담은 entity라고 한다. 각 entity는 다음과 같은 칼럼을 가진다고 한다.
Student Entity :
학생id, 이름, 나이, 가입한 클럽id
Club Entity :
클럽id, 클럽 이름
학생은 단 하나의 클럽만 가입이 가능하다면 학생과 클럽의 관계는 M:1이다.
그럼 jpa를 이용해 두 entity를 어떻게 매핑할까?
@Entity
public class Student {
@Id
@GeneratedValue
private Long id;
private String studentName;
private String studentName;
@ManyToOne
@JoinColumn(name="clubId")
private Club club;
}
@Entity
public class Club {
@Id
@GeneratedValue
private Long id;
private String clubName;
}
위의 코드를 보면 Student entity에 @ManyToOne
과 @JoinColumn
어노테이션으로 외래키를 생성한 것을 볼 수 있다.
@ManyToOne
: n:1을 나타내는 어노테이션, n인 엔티티에 붙인다.
@JoinColumn
: 외래키를 정의하는 어노테이션
일대일 관계는 양쪽이 서로 하나의 관계만 가지는 관계로 외래키가 어디에 있든 상관이 없다.
예를 들어, Student라는 entity와 각 학생의 시간표를 나타내는 TimeTable entity는 다음과 같이 매핑할 수 있다.
Student Entity :
학생id, 이름, 나이, 본인 시간표id
TimeTable Entity :
시간표id, 1교시, 2교시, 3교시, 4교시
@Entity
public class Student {
@Id
@GeneratedValue
private Long id;
private String studentName;
private String studentName;
@OneToOne
@JoinColumn(name="timeTable")
private TimeTable timeTable;
}
@Entity
public class TimeTable {
@Id
@GeneratedValue
private Long id;
private String time1;
private String time2;
private String time3;
private String time4;
}
참고자료
[JPA] 3. 엔티티 연관 관계 매핑 정리/예제
[JPA] 연관관계 매핑 알아보기 (@ManyToOne, @OneToMany, @OneToOne, @ManyToMany)