[java] Hibernate와 연관 관계 매핑

Hibernate는 Java 언어의 ORM(Object-Relational Mapping) 프레임워크로 가장 인기 있는 것 중 하나입니다. Hibernate를 사용하면 Java 객체를 관계형 데이터베이스 테이블에 매핑할 수 있습니다. 이번에는 Hibernate에서 연관 관계를 매핑하는 방법에 대해 알아보겠습니다.

1. 일대다 관계 매핑

일대다 관계는 하나의 엔티티가 여러 개의 다른 엔티티와 연관되어 있는 경우를 의미합니다. 예를 들어, 하나의 부서가 여러 명의 직원을 가질 수 있는 경우가 여기에 해당됩니다.

다음은 하나의 부서가 여러 명의 직원을 가지는 경우의 Hibernate에서의 매핑 예시입니다.

@Entity
@Table(name = "department")
public class Department {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @OneToMany(mappedBy = "department")
    private List<Employee> employees;

    // other fields and methods
}

@Entity
@Table(name = "employee")
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

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

    // other fields and methods
}

위와 같이 Department 엔티티 클래스에서 employees 필드에 @OneToMany 어노테이션을 사용하여 직원들과의 관계를 매핑하고, Employee 엔티티 클래스에서 department 필드에 @ManyToOne 어노테이션을 사용하여 부서와의 관계를 매핑합니다.

2. 다대다 관계 매핑

다대다 관계는 두 개의 엔티티가 서로 여러 개를 가질 수 있는 관계입니다. 예를 들어, 학생과 과목 간의 다대다 관계가 있을 수 있습니다.

다음은 학생과 과목 간의 다대다 관계를 Hibernate에서의 매핑 예시입니다.

@Entity
@Table(name = "student")
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @ManyToMany
    @JoinTable(name = "student_subject",
               joinColumns = @JoinColumn(name = "student_id"),
               inverseJoinColumns = @JoinColumn(name = "subject_id"))
    private List<Subject> subjects;

    // other fields and methods
}

@Entity
@Table(name = "subject")
public class Subject {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @ManyToMany(mappedBy = "subjects")
    private List<Student> students;

    // other fields and methods
}

위의 예시에서 Student 클래스의 subjects 필드와 Subject 클래스의 students 필드는 @ManyToMany 어노테이션을 사용하여 서로의 관계를 매핑합니다. 또한 @JoinTable 어노테이션을 사용하여 연결 테이블을 지정합니다.

결론

Hibernate를 사용하여 Java 객체와 관계형 데이터베이스 간의 연관 관계를 매핑하는 방법을 살펴보았습니다. 이를 통해 객체 지향적인 접근 방식으로 데이터베이스와 상호작용할 수 있으며, 간단하고 명확한 코드로 관계형 데이터베이스를 다룰 수 있습니다.

참고 문헌:

이상으로 Hibernate에서의 연관 관계 매핑에 대한 내용을 마치도록 하겠습니다. 부족한 부분이 있다면 언제든지 문의해 주세요.