본문 바로가기
IT/spring

@OneToMany vs @ManyToOne: JPA 관계 매핑의 차이

by 뉴코딩맨 2023. 7. 5.
JPA(Java Persistence API)에서는 엔티티 간의 관계를 매핑하기 위해 다양한 어노테이션을 제공합니다. @OneToMany와 @ManyToOne 어노테이션의 차이에 대해 알아보겠습니다. 두 어노테이션은 엔티티 간의 다대일 관계를 매핑할 때 사용되며, 각각의 특징과 사용법을 알아보겠습니다.
 
 

@OneToMany 어노테이션

  • 기능: @OneToMany 어노테이션은 한 엔티티가 다른 엔티티와 일대다 관계를 맺을 때 사용됩니다.
  • 컬렉션 속성: @OneToMany 어노테이션을 사용하여 일대다 관계에서 많은 엔티티를 저장하는 컬렉션 속성을 설정할 수 있습니다.
  • 예시: Author 엔티티가 여러 개의 Book 엔티티와 일대다 관계를 맺을 때 @OneToMany 어노테이션을 사용합니다.

 

@ManyToOne 어노테이션

  • 기능: @ManyToOne 어노테이션은 다른 엔티티와의 다대일 관계를 매핑할 때 사용됩니다.
  • 단일 필드 설정: @ManyToOne 어노테이션을 사용하여 다대일 관계에서 다른 엔티티를 단일 필드로 설정할 수 있습니다.
  • 예시: Book 엔티티가 하나의 Author 엔티티와 다대일 관계를 맺을 때 @ManyToOne 어노테이션을 사용합니다.

 

 

예제

다음은 Author 엔티티와 Book 엔티티 사이의 관계를 보여주는 예제입니다.
 
@Entity
public class Author {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    @OneToMany(mappedBy = "author")
    private List<Book> books;

    // Getter와 Setter 메소드 생략
}

@Entity
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;

    @ManyToOne
    @JoinColumn(name = "author_id")
    private Author author;

    // Getter와 Setter 메소드 생략
}
 
위의 예제에서 Author 엔티티는 @OneToMany 어노테이션을 사용하여 여러 개의 Book 엔티티와 일대다 관계를 맺습니다. 반면 Book 엔티티는 @ManyToOne 어노테이션을 사용하여 하나의 Author 엔티티와 다대일 관계를 맺습니다.
 

결론

@OneToMany와 @ManyToOne 어노테이션은 JPA에서 엔티티 간의 다대일 관계를 매핑하는 데 사용됩니다. @OneToMany는 일대다 관계에서 많은 엔티티를 저장하는 컬렉션 속성을 설정하며, @ManyToOne은 다대일 관계에서 다른 엔티티를 단일 필드로 설정합니다. 이를 통해 데이터베이스의 관계를 정의하고, 엔티티 간의 관계를 유연하게 처리할 수 있습니다.
 

댓글