1:N에서는 외래키의 주인은 N쪽에 있음
1:1관계에서는 지정해줘야함 (외래키를 가지고 있는 쪽이 주인)
외래키의 주인
외래키를 등록, 삭제, 수정 가능
외래키의 주인이 아니면 읽기만 가능
1:1관계 (단반향)
🔽 음식 (외래키의 주인)
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@OneToOne
@JoinColumn(name = "user_id")
private User user;
}
🔽 고객
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
1:1 양방향의 경우
🚨주의! 외래키의 주인이 아닌쪽에서 지정!!
아닌 쪽에서 mapped by = 외래케의 주인이 갖고있는 외래키 필드명
🔽 음식 (외래키의 주인)
@Entity
@Table(name = "food")
public class Food {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private double price;
@OneToOne
@JoinColumn(name = "user_id")
private User user;
}
🔽 고객
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne(mappedBy = "user")
private Food food;
}
🚨주의! 외래키의 주인이 아닌쪽에서 지정!!
아닌 쪽에서 mapped by = 외래케의 주인이 갖고있는 외래키 필드명
mappedBy로 외래키의 주인을 알려주지않으면
Jpa에서는 임의로 중간테이블을 생성하게 되기때문에
꼭 mappedBy로 외래키의 주인 명시하기!!
'Spring' 카테고리의 다른 글
[TIL] 240418 Spring Data JPA 페이징 및 정렬 | Pageable, PageableDefault (2) | 2024.04.18 |
---|---|
[TIL] 240412 즉시로딩, 지연로딩, 영속성 전이, OrphanRemoval (0) | 2024.04.12 |
[TIL] 240408 RestTemplate | NaverOpenApi 검색 (0) | 2024.04.08 |
[TIL] 240407 SpringSecurity (0) | 2024.04.07 |
[TIL] 240405 Bean Validation (0) | 2024.04.05 |