일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Token
- 토큰
- 널 허용
- 자바
- kotlin
- embededid
- 오블완
- 이메일 본인인증
- 코틀린
- JPA
- java
- javamailsender
- string.repeat()
- Spring Boot
- 객체지향
- 티스토리챌린지
- map
- 스프링 부트
- email api 구현
- ispresent
- @embededid
- Spring
- devpi
- JPQL
- 복합 키
- 스프링
- mutablemap
- string?
- jpa repository
- entity
- Today
- Total
DeveloPiano
[Java] JPA 엔티티 관계 매핑 : @OneToOne, @ManyToOne, @ManyToMany 본문
자바 개발자라면 데이터베이스와의 상호 작용이 필수적인데, JPA(Java Persistence API)는 이를 간소화하며 객체 지향적으로 데이터베이스를 관리할 수 있게 해줍니다. 특히, 엔티티 간의 관계를 매핑하는 것은 JPA를 사용하는 데 있어 중요한 부분입니다. 본 글에서는 JPA의 세 가지 주요 관계 매핑 타입인 @OneToOne, @ManyToOne, @ManyToMany에 대해 자세히 살펴보겠습니다.
@OneToOne 관계
@OneToOne 관계는 엔티티 간에 1:1 관계를 나타냅니다. 각 엔티티 인스턴스는 다른 엔티티의 단 하나의 인스턴스와 연결됩니다. 예를 들어, 한 사람이 하나의 여권을 소유하는 관계가 이에 해당합니다.
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne
private Passport passport;
}
@Entity
public class Passport {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(mappedBy = "passport")
private Person person;
}
@ManyToOne 관계
@ManyToOne 관계는 한 엔티티가 다른 엔티티의 여러 인스턴스와 관계를 맺을 수 있음을 나타냅니다. 이는 주로 "다수의 자식이 하나의 부모를 공유할 때" 사용됩니다. 예를 들어, 여러 주문이 한 고객에게 속하는 경우가 여기에 해당합니다.
@Entity
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "customer_id") // 외래 키 지정
private Customer customer;
}
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "customer")
private List<Order> orders = new ArrayList<>();
}
@ManyToMany 관계
@ManyToMany 관계는 두 엔티티 간에 서로 다수의 인스턴스를 참조할 수 있는 관계를 설명합니다. 이 관계는 복잡하며, 보통 연결 테이블을 사용하여 구현됩니다. 예를 들어, 여러 학생이 여러 과목을 수강할 수 있는 관계가 이에 해당합니다.
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany
@JoinTable(
name = "enrollment",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id")
)
private List<Course> courses = new ArrayList<>();
}
@Entity
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany(mappedBy = "courses")
private List<Student> students = new ArrayList<>();
}
결론
JPA의 관계 매핑 어노테이션은 데이터베이스 관계를 객체 지향적으로 표현하는 강력한 도구입니다. 각 관계 타입은 특정 상황에 적합하며, 개발자는 애플리케이션의 데이터 모델을 설계할 때 이러한 관계들을 적절히 활용해야 합니다. 올바르게 사용된 JPA 관계 매핑은 데이터 관리의 복잡성을 줄이고, 개발 프로세스를 효율적으로 만들어 줍니다. 이를 통해 개발자는 보다 집중적으로 비즈니스 로직의 구현에 초점을 맞출 수 있습니다.
'Develop > Java' 카테고리의 다른 글
[Java] Spring Boot 활용 Email 발송하기 (1) | 2024.09.02 |
---|---|
[Java] StringUtils 사용의 장점 (0) | 2024.08.20 |
[Java] Class와 Record : 정의, 특징, 그리고 차이점 이해하기 (1) | 2024.08.09 |
[Java] 예외 처리의 이해 : try-catch와 throws의 차이점 (0) | 2024.08.09 |
[Java] super 키워드 사용법 (0) | 2024.08.03 |