본문 바로가기
JAVA/SpringBoot

JPA @JoinColumn 어노테이션 이해하기

by GangDev 2024. 3. 24.

 

@JoinColumn 어노테이션은 JPA에서 사용되며, 엔티티의 필드가 다른 엔티티에 대한 외래 키(foreign key)를 나타낼 때 사용된다.
엔티티 간의 관계를 매핑할 때 주로 사용된다.
(@ManyToOne 이나 @OneToOne 관계에서 자주 볼 수 있다)

 

속성 >>

 

name : 데이터베이스 컬럼의 이름을 지정한다.(foreign key 컬럼의 이름이 된다)

 

referencedColumnName : 참조하는 테이블의 컬럼 이름을 지정한다. (기본값은 참조된 테이블의 기본 키)

 

foreignKey : foreign key 제약 조건을 직접 지정할 때 사용한다.

 

unique : 이 속성을 true 로 설정하면 foreign key 컬럼에 대한 유니크 제약 조건을 설정한다(같은 값을 가진 foreign key가 중복되지 않도록 한다)

 

nullable : true 로 설정하면 foreign key 컬럼을 nullable 로 만든다.(해당 열에 null 값을 허용한다)

 

insertable : 필드가 데이터베이스에 삽입될 수 있는지 제어한다. (기본값은 true: 해당 필드는 엔티티를 데이터베이스에 추가할 때 데이터베이스 테이블의 컬럼으로 삽입된다)


false로 설정하면 해당 필드의 값이 데이터베이스에 삽입되지 않는다.(읽기 전용 필드로 만들 수 있음)

 

updatable : 필드가 데이터베이스에서 업데이트될 수 있는지 제어한다. (기본값은 true: 해당 필드는 엔티티를 업데이트할 때 데이터베이스 테이블의 컬럼으로 업데이트된다)

false 로 설정하면 해당 필드의 값이 데이터베이스에서 업데이트되지 않는다.

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

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

}

@Entity
public class Department {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

}

 

@JoinColumn(name = "department_id", referencedColumnName = "id") :
@JoinColumn 어노테이션은 User 엔티티의 department 필드가 Department 엔티티의 id 필드를 참조하는 foreign key 관계를 설정한다.
name 속성은 데이터베이스 테이블에서 사용할 외래 키 컬럼의 이름을 지정한다.
referencedColumnName 속성은 참조하는 엔티티의 기본 키 컬럼을 지정한다.

 

---

24년 1월 11일에 작성된 글입니다