JAVA/이론

79. [JAVA] @OneToMany & @ManyToOne ??

천재단미 2025. 1. 15. 16:42
728x90
반응형

 

 

 

 1. @OneToMany

설명

  • *"하나의 엔티티가 여러 엔티티와 연결될 수 있음"**을 나타냅니다.
  • 보통 부모-자식 관계에서 부모 쪽에 사용됩니다.
  • 컬렉션(List, Set 등)으로 연결된 엔티티들을 참조합니다.

특징

  • 연관된 엔티티들을 저장하는 컬렉션(예: List나 Set)을 사용합니다.
  • 기본적으로 단방향 또는 양방향 관계로 설정할 수 있습니다.
  • 양방향 관계로 설정하면 mappedBy 속성을 사용하여 관계의 주인을 설정합니다.

예제

코드

java
코드 복사
@Entity
public class Parent {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Child> children = new ArrayList<>();
}

@Entity
public class Child {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToOne
    @JoinColumn(name = "parent_id")
    private Parent parent;
}

설명

  • Parent 엔티티는 여러 Child 엔티티를 가질 수 있습니다.
  • @OneToMany(mappedBy = "parent")는 Child 엔티티에서 매핑된 필드(parent)를 지정합니다.
  • 양방향 관계에서 mappedBy를 통해 연관 관계의 주인을 명시해야 합니다. 여기서 Child 엔티티의 parent가 관계의 주인입니다.

 

 2. @ManyToOne

설명

  • *"여러 엔티티가 하나의 엔티티와 연결될 수 있음"**을 나타냅니다.
  • 보통 부모-자식 관계에서 자식 쪽에 사용됩니다.
  • 단방향이나 양방향으로 설정할 수 있습니다.

특징

  • 다수의 엔티티가 하나의 엔티티를 참조합니다.
  • @JoinColumn을 사용하여 외래 키를 정의합니다.

예제

코드

java
코드 복사
@Entity
public class Child {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToOne
    @JoinColumn(name = "parent_id") // 외래 키 설정
    private Parent parent;
}

@Entity
public class Parent {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
}

설명

  • Child 엔티티에서 @ManyToOne을 사용해 여러 자식이 하나의 부모를 참조합니다.
  • @JoinColumn(name = "parent_id")는 Child 테이블에서 부모를 참조하는 외래 키로 사용됩니다.

 

 3. @OneToMany vs @ManyToOne

특징

 @OneToMany  @ManyToOne

관계 방향 부모 → 자식 자식 → 부모
주 사용 위치 부모 엔티티 자식 엔티티
외래 키 위치 자식 테이블에 존재 자식 테이블에 존재
필드 타입 List, Set 등 컬렉션 단일 객체
양방향 관계 mappedBy로 관계의 주인 지정 필요 관계의 주인으로 설정됨

 

  4. 실제 데이터베이스 테이블

예를 들어, Parent와 Child 엔티티를 위와 같이 매핑하면 다음과 같은 테이블이 생성됩니다.

Parent 테이블

id name

1 Parent A

Child 테이블

id name parent_id

1 Child 1 1
2 Child 2 1
  • parent_id는 Child 테이블에서 부모 엔티티를 참조하는 외래 키로 작동합니다.

 

728x90
반응형
home top bottom
}