
@OneToOne
- 정의
@OneToOne은 두 엔티티(Entity)가 1:1 관계임을 명시
예시: 한 명의 사람(Person)은 한 개의 여권(Passport)만 가짐
- 핵심 개념
양쪽 모두에서 최대 한 개의 객체만 연결됨
데이터베이스에서는 외래키(foreign key) 제약조건을 이용해 구현됨
@Entity
public class Person {
@Id
private Long id;
@OneToOne
@JoinColumn(name = "passport_id") // 외래키 지정
private Passport passport;
}
@Entity
public class Passport {
@Id
private Long id;
// 양방향 예시
@OneToOne(mappedBy = "passport")
private Person person;
}
- 특징 및 주의사항
관계의 주인(owner)만이 외래키를 관리
기본적으로 지연로딩(LAZY) 대신 즉시로딩(EAGER)
(fetch = FetchType.LAZY로 변경 가능)
단방향, 양방향 모두 가능.
@OneToMany
- 정의
@OneToMany는 한 엔티티가 여러 개의 엔티티와 연결될 때 사용
예시: 한 명의 사용자(User)는 여러 개의 주문(Order)을 가질 수 있음
- 핵심 개념
1(주인) : N(다수) 관계를 표현
데이터베이스에서는 일반적으로 반대쪽(N쪽) 테이블에 외래키로 구현
@Entity
public class User {
@Id
private Long id;
@OneToMany(mappedBy = "user")
private List<Order> orders;
}
@Entity
public class Order {
@Id
private Long id;
@ManyToOne
@JoinColumn(name = "user_id") // 외래키 지정
private User user;
}
- 특징 및 주의사항
컬렉션(List, Set 등)으로 선언
단방향 사용 시, 중간 테이블(Join Table)이 자동 생성되어 비효율적일 수 있으니, 양방향 매핑 권장.
기본적으로 LAZY 로딩
사용 시 장점
1. 객체 모델과 DB 테이블 관계를 자동으로 맞출 수 있음
2. 코드의 가독성과 유지보수성이 올라감
3. 데이터 일관성과 무결성 보장
4. 코드에서 직관적으로 연관 객체를 사용할 수 있음
5. 연관관계 기반으로 다양한 JPA 기능 활용 가능
출처
'Develop > JPA' 카테고리의 다른 글
| 암호화/복호화 알고리즘 KISA_SEED_CBC (0) | 2025.05.22 |
|---|---|
| JPA, QueryDSL (0) | 2025.05.01 |
| 마이페이지 회원정보 수정 로직 (14) (2) | 2024.11.26 |
| 마이페이지 회원정보 수정로직 (13) (2) | 2024.11.25 |
| 마이페이지에 백엔드 작업하기 (11) (2) | 2024.11.21 |