엔티티 간의 연관관계는 데이터베이스 테이블 간의 관계를 객체 지향 프로그래밍에서 표현하는 방법입니다. Spring Data JPA에서 엔티티 간의 연관관계를 설정하면, 데이터베이스 테이블 간의 관계를 객체 사이에서도 연결할 수 있습니다.
대표적인 연관관계 종류는 1:1 (일대일), 1:N (일대다), N:1 (다대일), N:M (다대다) 관계가 있습니다. 각 관계는 @OneToOne
, @OneToMany
, @ManyToOne
, @ManyToMany
같은 어노테이션을 통해 설정합니다.
1. 일대일 (1:1) 관계
- 설명: 한 엔티티가 다른 엔티티와 정확히 하나의 연관을 가질 때 사용됩니다.
- 예시: 한 사용자(
User
)가 한 개의 프로필(Profile
)을 가지는 경우.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne
@JoinColumn(name = "profile_id")
private Profile profile;
// 기타 필드와 메서드
}
2. 일대다 (1:N) 관계
- 설명: 하나의 엔티티가 여러 개의 다른 엔티티와 연관될 때 사용됩니다. 주로 부모-자식 관계에서 사용됩니다.
- 예시: 한 명의 작가(
Author
)가 여러 책(Book
)을 쓰는 경우.
@Entity
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "author")
private List<Book> books;
// 기타 필드와 메서드
}
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "author_id")
private Author author;
// 기타 필드와 메서드
}
3. 다대일 (N:1) 관계
- 설명: 여러 엔티티가 하나의 엔티티와 연관될 때 사용됩니다. 보통
@ManyToOne
어노테이션을 사용하며, 1:N 관계의 반대입니다. - 예시: 여러 학생(
Student
)이 하나의 학교(School
)에 소속되는 경우.
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "school_id")
private School school;
// 기타 필드와 메서드
}
4. 다대다 (N:M) 관계
- 설명: 여러 엔티티가 서로 다수의 연관을 가질 때 사용됩니다. 다대다 관계는 중간 테이블을 통해 표현됩니다.
- 예시: 여러 학생(
Student
)이 여러 강의(Course
)를 수강하는 경우.
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany
@JoinTable(
name = "student_course",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id"))
private List<Course> courses;
// 기타 필드와 메서드
}
@Entity
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany(mappedBy = "courses")
private List<Student> students;
// 기타 필드와 메서드
}
정리
- 연관관계 설정: 엔티티 간의 관계는 테이블 간의 외래 키(FK)를 이용해 설정됩니다.
- 지연 로딩: JPA는
@ManyToOne
과@OneToMany
등의 관계에 대해 기본적으로 지연 로딩(Lazy Loading)을 사용하여 성능을 최적화합니다. - Cascade 옵션:
CascadeType
을 사용해 연관된 엔티티도 같이 저장, 삭제될 수 있도록 설정할 수 있습니다.
이와 같은 연관관계 설정은 객체 간의 관계를 데이터베이스 구조로 연결해주므로, JPA에서 데이터 간의 관계를 보다 쉽게 관리할 수 있습니다.
'Spring' 카테고리의 다른 글
스프링 부트 3의 특징(이전 버전과 비교) (0) | 2024.11.16 |
---|---|
지연로딩,AOP,Mockito에 대하여 (0) | 2024.11.11 |
@Validation에 대하여 (0) | 2024.11.11 |
JPA와 영속성 컨텍스트, 그리고 Bean의 관계 (0) | 2024.11.10 |
파일 디렉터리 구조 형성 방법들 (0) | 2024.11.10 |