[JPA] 조인테이블 @JoinTable

atdawn·2024년 6월 3일

SPRING BOOT+JPA

목록 보기
19/49

다대다(Many To Many) 와 조인테이블

다대다 관계는 하나의 엔티티가 여러 다른 엔티티와 관계를 맺을 수 있고, 반대로 다른 엔티티도 여러 엔티티와 관계를 맺을 수 있는 상황을 말합니다. 이러한 관계를 데이터베이스에 저장하기 위해서는 별도의 연결 테이블이 필요

@JoinTable 어노테이션 구조

  • name : 연결 테이블의 이름
  • joinColumns: 현재 엔티티와 연결 테이블 간의 외래 키를 정의하는 @JoinColumn 어노테이션 배열
  • inverseJoinColumns: 반대 엔티티와 연결 테이블 간의 외래 키를 정의하는 @JoinColumn 어노테이션 배열

예제


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

    private String name;

    @ManyToMany
    @JoinTable(
        name = "student_course",
        joinColumns = @JoinColumn(name = "student_id"),
        inverseJoinColumns = @JoinColumn(name = "course_id")
    )
    private List<Course> courses = new ArrayList<>();

    // Getters and Setters
}

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

    private String name;

    @ManyToMany(mappedBy = "courses")
    private List<Student> students = new ArrayList<>();

    // Getters and Setters
}

  • Student 엔티티와 Course 엔티티는 서로 다대다 관계
  • @JoinTable 어노테이션은 연결 테이블(student_course)을 정의
    • name="student_course" 로 설정하여 연결테이블의 이름을 지정
    • joinColumns 속성은 Student 엔티티의 외래 키(student_id)를 연결 테이블에 매핑
    • inverseJoinColumns 속성은 Course 엔티티의 외래 키(course_id)를 연결 테이블에 매핑
  • Course 엔티티의 students 필드는 mappedBy 속성을 사용하여 Student 엔티티의 courses 필드에 의해 매핑
profile
복습 복습 복습

0개의 댓글