JPA 연관관계

YEON·2022년 4월 4일
0

JPA

목록 보기
3/5

🙋‍♀️ 아직 정리가 진행중인 포스팅입니다.


객체 관계 매핑

@JoinColumn

주요 속성

  • name 매핑할 외래키 이름
  • referencedColumnName 외래키가 참조하는 대상 테이블의 컬럼명
  • foreignKey 외래키 제약조건을 직접 지정 (테이블을 생성할 때만 사용된다)

name

  • name은 매핑할 외래 키 이름을 지정한다.
  • @JoinColumn(name="user_id") 의 경우 User에 대한 정보를 어떤 컬럼에 저장할 것인지 지정하는 것이다.
    그러면 Answer 에 user_id 라는 컬럼이 생기고 거기에 User의 id가 담기게 된다.
  • 만약 생략하게되도 자동으로 컬럼 이름이 만들어지는데 엔티티의 이름과(+) 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;
}

referencedColumnName

  • 외래 키가 참조하는 대상 테이블의 컬럼명을 지정한다.

foriegnKey

  • 외래키 제약조건을 직접 지정할 수 있다.

외래키 제약조건

  • 외래키 제약조건이란 두 테이블 사이의 관계를 선언함으로써, 데이터의 무결성을 보장해 주는 역할.
    외래 키 관계를 설정하게 되면 하나의 테이블(외래 키 테이블)이 다른 테이블(기준 테이블)에 의존하게 된다. '외래 키 테이블'이 참조하는 '기준 테이블'의 열은 반드시 PK이거나 UNIQUE 제약 조건이 설정되어 있어야 한다.
  • 결국, 외래키 제약조건을 지정한다는 것은 외래키를 지정할때 참조하는 키 이외에 외래키에 대한 이름을 지정하거나 제약조건에 정의 혹은 제약조건을 생성하는지 등을 지정하는 것이다.
  • foreignKey 타입이 @Foreign 으로 되어있다.

이때 @Foreign Type 의 속성은 공식문서를 보면 다음과 같다.

  • name 은 외래키 제약조건의 이름을 정한다.
  • foreignKeyDefinition 은 외래키 제약조건을 정의한다.
  • value 은 스키마 생성이 적용될 때 외래 키 제약 조건을 생성해야 하는지 여부를 지정한다.
  • 따라서, JPA 사용시 ForeignKey로 이름을 부여하고 싶은 경우 @JoinColumn으로 foreignkey 이름을 부여할 수 있다.
    예제로 만약 foreignKey 의 name 을 설정하면 add constraint 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;

profile
- 👩🏻‍💻

0개의 댓글