public class Schedule extends BaseEntity{
// 일정 고유 식별 번호, 일정 제목, 일정 내용, 작성자명, 비밀번호, 작성일, 수정일
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 30, nullable = false)
private String title;
@Column(length = 200, nullable = false)
private String contents;
@Column(length = 10, nullable = false)
private String username;
@Column(length = 20, nullable = false)
private String password;
public class Comment extends BaseEntity{
// 댓글 고유 식별자, 일정 (외래 키), 댓글 내용, 작성자명, 비밀번호, 작성일, 수정일
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "schedule_id")
private Schedule schedule;
@Column(length = 100, nullable = false)
private String contents;
@Column(length = 10, nullable = false)
private String username;
@Column(length = 20, nullable = false)
private String password;
2개의 엔티티가 존재한다. 댓글 엔티티는 일정 엔티티의 외래 키를 지닌다.
처음에는 댓글이 외래 키로 일정을 지닌다고 했을 때,
외래 키 = 고유 키. 라고 생각했다.
@IdClass를 이용하기 위해
public class ScheduleId {
private Long schedule;
}
를 생성했다.
이로 특정 일정에 댓글 생성을 포스트맨으로 확인해본 결과
처음에는 잘 구현된 줄 알았으나, BaseEntity를 활용한 작성일, 수정일의 결과가 두 번째부터 null값으로 구현됨.
한 일정에 여러 댓글이 생성되도록 ManyToOne을 구상하였으나,
외래 키 = 고유 키로 인해 한 일정에 여러 고유 객체 생성 불가한 상황
따라서 댓글의 고유 키를 따로 설정, 일정의 고유 키를 속성으로 설정 >> 구상대로 작동 확인
외래 키라는 키워드에서 너무 키에 집착해서 Id로 좁은 생각..
@Id에 대해서 이해가 넓어지는 계기가 됨
더욱 이해를 넓히기 위해 @EmbeddedId, OneToOne, ManyToMany, 식별/비식별 관계에 대해서도 알면 좋을 듯 하다.