@ManyToOne
🔗 @ManyToOne
정의
@ManyToOne은 JPA에서 N:1 관계를 매핑할 때 사용하는 애너테이션이다. 여러 개의 현재 엔티티가 하나의 대상 엔티티와 연결될 때 사용한다.
예를 들어 게시글 여러 개가 하나의 사용자에 속하는 구조에 적합하다.
🧩 역할
- 다대일 관계를 표현한다
- 외래 키를 가진 쪽이 관계의 주인이 된다
- 연관 엔티티의 참조를 객체로 다룰 수 있게 한다
- 게시글-작성자, 주문-회원 같은 구조에 자주 사용된다
🛠 사용법
기본 예시
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;
예시: 게시글과 사용자
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String content;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;
}
🧩 주요 요소
fetch
FetchType.LAZY- 연관 엔티티를 실제 사용할 때까지 로딩하지 않는다
- 보통 기본 권장 방식이다
FetchType.EAGER- 연관 엔티티를 즉시 함께 로딩한다
- 필요 이상으로 쿼리가 늘어날 수 있다
@JoinColumn
- 외래 키 컬럼 이름을 지정한다
nullable = false를 주면 필수 관계를 표현할 수 있다
⚠️ 주의사항
@ManyToOne은 보통 외래 키를 가진 쪽에 선언한다.- 기본적으로
LAZY를 사용하는 편이 안전하다. EAGER는 예상하지 못한 추가 쿼리를 유발할 수 있다.- 양방향 관계를 만들 경우 반대편에는 보통
mappedBy를 사용한다. - JSON 직렬화 시 순환 참조나 지연 로딩 문제가 생길 수 있다.
📌 정리
@ManyToOne은 다대일 관계를 표현하는 JPA 애너테이션이다.- 외래 키를 가진 쪽이 관계의 주인이 된다.
fetch = FetchType.LAZY를 기본적으로 고려하는 것이 좋다.
댓글남기기