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
반응형
'JAVA > 이론' 카테고리의 다른 글
90. [ JAVA ] RestTemplate과 ResponseEntity의 차이와 활용법 (5) | 2025.01.19 |
---|---|
60. [ JAVA ] SpringBoot JPA @Entity 사용법 (0) | 2025.01.12 |
54. [ JAVA ] Spring Boot에서 발생하는 예외처리(@Exception Hander) (0) | 2025.01.11 |
36. [ JAVA ] 배열 : HashMap (0) | 2024.12.17 |
35. [ JAVA ] 배열 : ArrayList (0) | 2024.12.17 |