🔗 @ManyToOne

정의

@ManyToOneJPA에서 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를 기본적으로 고려하는 것이 좋다.

연결 문서

태그: ,

카테고리:

업데이트:

댓글남기기