@ManyToOne VS @ManyToOne + @JoinColumn

Hyun·2023년 9월 7일
0

Spring

목록 보기
25/38

Ex) 엔티티 속성

@Entity
public class Answer {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(columnDefinition = "TEXT")
    private String content;

    private LocalDateTime createDate;

    @ManyToOne
    private Question question;
}

@ManyToOne 만 사용한 경우

@ManyToOne
private Department department;

@ManyToOne + @JoinColumn 을 사용한 경우

@ManyToOne
@JoinColumn(name = "department_id")
private Department department;

공통점

: 둘다 외래 키 컬럼이 생성된다.

차이점

@ManyToOne 만 사용한 경우,
외래 키 컬럼의 이름을 기본 규칙에 따라 생성한다.
일반적으로 필드명(department)과 'Department' 엔티티의 기본 키(primary key)필드명을 조합하여 외래 키 컬럼의 이름을 설정한다.

@ManyToOne과 @JoinColumn명을 함께 사용한 경우,
외래 키 이름을 명시적으로(직접) 지정할 수 있다. 즉 위의 예시에서는 "department_id"라는 이름을 가진 외래 키 컬럼이 생성된다. 이렇게 하면 JPA는 명시적으로 지정한 컬럼 이름을 사용하게 된다.

따라서
'Department' 엔티티의 기본 키(primary key)필드명이 "id"인 경우, 위의 두 가지 방식으로 정의한 'department' 필드는 동일한 외래 키 이름을 생성한다.

결과적으로

@ManyToOne 만 사용한 경우@ManyToOne과 @JoinColumn명을 함께 사용한 경우 의 차이는 생성되는 외래 키 컬럼의 이름을 명시적(직접)으로 설정해주느냐 아니냐의 차이다.

profile
better than yesterday

0개의 댓글