🙋♀️ 아직 정리가 진행중인 포스팅입니다.
주요 속성
name
매핑할 외래키 이름referencedColumnName
외래키가 참조하는 대상 테이블의 컬럼명foreignKey
외래키 제약조건을 직접 지정 (테이블을 생성할 때만 사용된다)
@JoinColumn(name="user_id")
의 경우 User에 대한 정보를 어떤 컬럼에 저장할 것인지 지정하는 것이다.엔티티의 이름
과(+) pk 이름
으로 만들어진다. (ex. 엔티티이름_pk이름)public class Answer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User writer;
}
외래키 제약조건
- 외래키 제약조건이란 두 테이블 사이의 관계를 선언함으로써, 데이터의 무결성을 보장해 주는 역할.
외래 키 관계를 설정하게 되면 하나의 테이블(외래 키 테이블)이 다른 테이블(기준 테이블)에 의존하게 된다. '외래 키 테이블'이 참조하는 '기준 테이블'의 열은 반드시 PK이거나 UNIQUE 제약 조건이 설정되어 있어야 한다.- 결국, 외래키 제약조건을 지정한다는 것은 외래키를 지정할때 참조하는 키 이외에 외래키에 대한 이름을 지정하거나 제약조건에 정의 혹은 제약조건을 생성하는지 등을 지정하는 것이다.
foreignKey
타입이 @Foreign 으로 되어있다.이때 @Foreign Type 의 속성은 공식문서를 보면 다음과 같다.
name
은 외래키 제약조건의 이름을 정한다.foreignKeyDefinition
은 외래키 제약조건을 정의한다.value
은 스키마 생성이 적용될 때 외래 키 제약 조건을 생성해야 하는지 여부를 지정한다.
FKihcxeouul..
와 같이 뜨던 것이 add constraint fk_answer_to_question
으로 변경되는 것을 확인 할 수 있다. @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "question_id", foreignKey = @ForeignKey(name = "fk_answer_to_question"))
private Question question;