이 글은 의존성 주입과 db연결을 다루지 않으며, 오로지 Entity 구현 만을 다룹니다.
userId를 기본 키로 갖는 User Entity입니다.
나중에 작성할 UserTitle Entity와 1:N 관계를 나타내기 위해 @OneToMany 어노테이션을 사용하였습니다.
다음은 TitleId를 복합 키로 갖는 Title Entity입니다.
@IdClass로 구현하였으며, 관련 구현 방법은 [여기]에 있습니다.
사실 복합 키로 구현하지 말고, titleId를 기본 키로 두는게 좋지만 학습을 위해 titleName까지 묶어서 복합 키를 구현하였습니다.
이제 저는 User와 Title Entity의 N:N 관계를 UserTitle Entity로 구현할 생각이며, 각각 Entity의 key들을 외래 키이자 기본 키로 사용하려고 합니다.
우선 UserTitle Entity와 1:N 관계를 위해 @OneToMany 어노테이션을 추가합니다.
mappedBy를 확실히 지정해줍니다!
이것 또한 IdClass로 구현하기 위해 UserTitleId를 구현하였습니다.
IdClass의 변수로는 참조할 key를 적어주시면 되는데
User는 String인 userId
Title은 Entity 자체인 Title을 자료형으로 넣어줍니다.
변수 명은 아까 User와 Title에서 mappedBy로 작성해둔 이름으로 맞춰줍니다.
UserTitle 최종본입니다.
클래스 위에 @IdClass 어노테이션 달아주시고,
참조할 Entity를 자료형으로 가지는 변수를 생성해주시면 됩니다.
여기서 변수명은 mappedBy와 통일시켜야 합니다!
그리고 JoinColumn을 이용해 참조하는 필드 이름(referencedColumnName)과 데이터베이스에 표시될 이름(name)을 지정해줍니다.
이제 실행합니다!
로그를 보시면 테이블이 잘 생성되었고, Foreign Key도 설정이 잘 되었음을 확인할 수 있습니다.
그리고 이렇게 테이블이 잘 생성되었음을 알 수 있습니다!
다음에는 Embeddable으로 구현해서 포스팅해볼 생각입니다.