Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코드업
- VPC
- 월미도
- DFS
- Docker
- 클라우드 컴퓨팅
- gcp
- 클라우드
- 스프링부트
- Spring Boot
- 쿠버네티스
- Elasticsearch
- 알고리즘
- 프로그래밍문제
- 로드밸런서
- Spring Data JPA
- springboot
- Apache Kafka
- JPA
- 스프링
- 백준
- aws
- 오일러프로젝트
- 인천여행
- 카프카
- Spring
- 스프링 부트
- 자료구조
- 백트래킹
- Kafka
Archives
- Today
- Total
GW LABS
스프링 부트 핵심 가이드 (7) - 연관관계 매핑 본문
JPA를 통한 전체적인 작업 FLOW
- 엔티티 설계/작성
- 테스트 코드 작성 (아마도 서비스 레이어)
- 기능 확인
- 쿼리 확인
- 기능완성
9.1 연관관계 매핑 종류와 방향
- One to One
- One to Many
- Many To One
- Many To Many
- 비즈니스 로직의 관점에서는 엔티티간 관계를 단방향으로 설정하고, 필요시 양방향으로 뚫는다
- 연관관계 주인: 외래키를 갖고 있는 테이블 (상대 엔티티는 읽기 작업만 수행가능)
9.3 일대일 매핑
- OneToOne: 일대일 연관관계 매핑
- Joincolumn: 외래키 이름 설정
- name: 매핑할 외래키의 이름을 설정
- referencedColumnName: 외래키가 참조할 상대 테이블의 컬럼명 지정
- foreignKey: 외래키를 생성하면서 지정할 제약조건 설정(unique, nullable, insertable, updatable)
- mappedBy: 어떤 객체가 주인인지 표시하는 속성
- 외래키 필드에는 ToString.Exclude 어노테이션으로 순환참조를 없애야 한다.
9.4 다대일, 일대다 매핑
- ManyToOne: 다대일 연관관계 매핑
- OneToMany: 일대다 연관관계 매핑
9.5 다대다 매핑
- 실무에서 거의 사용하지 않는 구성
- 중간 테이블로 인해 생각치 않은 쿼리들이 발생할 수 있음
- JoinTable, JoinColumn 등으로 중간테이블을 관리할 수 있으나, 결과적으로 쿼리와 연관관계 제어를 Hibernate에 위임하는 구조기 때문에 한계가 있음
- 결론적으로 연결 테이블을 위한 엔티티를 생성하고 관리하는 것이 좀 더 바람직한 방향이다.
9.6 영속성 전이
- 영속성 전이: 엔티티의 영속성 상태를 변경할 대 그 엔티티와 연관된 엔티티의 영속성에도 영향을 미쳐 영속성 상태를 변경하는 것을 의미한다.
- 특정 상황에 맞춰 영속성 전이 타입을 설정하면 연관된 엔티티들의 동작도 함께 수행이 가능하다.
- CascadeType
- ALL: 모든 영속 상태 변경에 대한 영속성 전이를 적용
- PERSIST: 엔티티가 영속화할 대 연관된 엔티티도 함께 영속화
- MERGE: 엔티티를 영속성 컨텍스트에 병합할 때 연관된 엔티티도 병합
- REMOVE: 엔티티를 제거할 대 연관된 엔티티도 제거
- REFRESH: 엔티티를 새로고침할 때 연관된 엔티티도 새로고침
- DETACH: 엔티티를 영속성 컨텍스트에서 제외하면 연관된 엔티티도 제외
- 고아 객체: 부모 엔티티와 연관관계가 끊어진 엔티티
- orphanRemoval 옵션으로 고아 객체를 제거할 수 있음
'Book-Review > Programing' 카테고리의 다른 글
스프링 부트 핵심 가이드 (9) - 서버간 통신 (0) | 2022.08.19 |
---|---|
스프링 부트 핵심 가이드 (8) - 유효성 검사와 예외처리 (0) | 2022.08.18 |
스프링 부트 핵심 가이드 (6) - Spring Data JPA 활용 (0) | 2022.08.16 |
스프링 부트 핵심 가이드 (5) - 테스트 코드 작성하기 (0) | 2022.08.15 |
스프링 부트 핵심 가이드 (4) - 데이터베이스 연동 (0) | 2022.08.13 |
Comments