본문 바로가기
IT/spring

스프링 @ManyToOne 어노테이션

by 뉴코딩맨 2023. 7. 4.
스프링에서 엔티티 간의 관계를 매핑하기 위해 다양한 어노테이션을 제공합니다. 그 중에서도 @ManyToOne 어노테이션은 다대일(N:1) 관계를 매핑할 때 사용됩니다. @ManyToOne 어노테이션의 기능과 사용법에 대해 알아보겠습니다.

 

 

@ManyToOne 어노테이션의 기능

@ManyToOne 어노테이션은 다음과 같은 기능을 제공합니다.
 
다대일(N:1) 관계 매핑: @ManyToOne 어노테이션은 엔티티 간의 다대일 관계를 매핑할 때 사용됩니다. 즉, 한 쪽 엔티티가 다른 쪽 엔티티를 참조하는 관계를 표현할 수 있습니다.
외래 키(Foreign Key) 매핑: @ManyToOne 어노테이션은 외래 키(Foreign Key) 매핑을 자동으로 처리합니다. 연관된 엔티티의 기본 키(primary key)를 참조하여 외래 키를 생성하고 관리합니다.
지연 로딩(Proxy) 지원: @ManyToOne 어노테이션은 기본적으로 지연 로딩(Lazy Loading)을 지원합니다. 연관된 엔티티를 필요로 할 때까지 데이터베이스에서 로딩하지 않으며, 프록시(Proxy) 객체를 사용하여 필요한 시점에 로딩됩니다.

 

@ManyToOne 어노테이션 사용법

@ManyToOne 어노테이션을 사용하기 위해 다음과 같은 단계를 따릅니다.
 
연관 엔티티 클래스 생성: 관계를 맺을 다른 엔티티 클래스를 생성합니다.
@ManyToOne 어노테이션 적용: 다대일 관계를 맺을 필드에 @ManyToOne 어노테이션을 적용합니다. 필요한 속성을 설정하여 연관 엔티티와의 매핑을 정의합니다.
외래 키(Foreign Key) 설정: @JoinColumn 어노테이션을 사용하여 외래 키의 속성을 지정합니다. name 속성을 통해 외래 키의 컬럼명을 설정할 수 있습니다.
 
 

예제

다음은 Order 엔티티와 Customer 엔티티 사이의 다대일 관계를 @ManyToOne 어노테이션을 사용하여 매핑한 예제입니다.
 
@Entity
@Table(name = "orders")
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // 다대일 관계 매핑
    @ManyToOne
    @JoinColumn(name = "customer_id")
    private Customer customer;

    // Getter와 Setter 메소드 생략
}

@Entity
@Table(name = "customers")
public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // Getter와 Setter 메소드 생략
}
 
위의 예제에서는 Order 엔티티의 customer 필드에 @ManyToOne 어노테이션을 적용하여 다대일 관계를 매핑했습니다. @JoinColumn 어노테이션을 사용하여 customer_id 컬럼을 외래 키로 설정하였습니다.
 

결론

@ManyToOne 어노테이션은 스프링에서 다대일 관계를 매핑할 때 사용되며, 외래 키 매핑과 지연 로딩을 자동으로 처리해줍니다. 이를 통해 엔티티 간의 관계를 효과적으로 구성할 수 있고, 데이터베이스 연동을 용이하게 할 수 있습니다. 앞서 소개한 예제를 참고하여 다대일 관계를 적절히 활용해보세요.

 

 

스프링 QueryDSL

QueryDSL은 자바 기반의 동적 쿼리 작성을 위한 라이브러리로, 스프링 프레임워크에서 많이 사용됩니다.스프링 QueryDSL에 대해 소개하고, 주요 기능과 사용법에 대해 설명하겠습니다. QueryDSL의 장점

newcodingman.tistory.com

 

'IT > spring' 카테고리의 다른 글

JPA @OneToMany 어노테이션  (0) 2023.07.05
스프링 @JoinColumn 어노테이션  (0) 2023.07.04
스프링 QueryDSL  (0) 2023.07.04
스프링 @Query 어노테이션  (0) 2023.07.04
스프링 데이터 JPA  (0) 2023.07.04

댓글