상세 컨텐츠

본문 제목

2. 도메인 분석 설계

본문

키워드

다대다관계 (가능하면 사용하지 말 것)

상속관계매핑 (@Inheritance)

양방향 연관 관계 (fk가 있는 곳을 연관 관계의 주인으로 정하기)

매핑

collection (list)

jpa 내장 타입

enum 타입

객체 - 관계형 DB (다대다 관계 가능 여부에서 갈림)

즉시로딩 VS 지연 로딩

하이버네이트

cascade 옵션

연관관계 편의 메서드


# 객체와 관계형 DB

객체

: 둘 다 collection 가지게 해서 다대다 관계로 표현하기 가능

관계형 DB

: collection 을 양쪽에서 갖을 수 없음. 일대다 - 다대일 로 풀어주는 중간 테이블 필요

 

# @ManyToMany 사용하면 안되는 (비추인) 이유

중간 테이블에 (ex. 수정일) 같은 추가적인 요소가 분명 들어가기 마련

그런데 @ManyToMany 사용하면 추가할 수 없음

실무에서 운영하기도 어려움

 

# 값타입에서는 setter 쓰지 않기

값타입 ex. Address (city, street, zipcode)

값 타입은 값이 변경 되면 안됨. 따라서 setter 는 만들지 않는게 좋음

-> 기본생성자, 생성자 만들기

 

# (즉시로딩이 아닌) 지연로딩으로 설정

즉시로딩은 내가 원했던 데이터만 가져오는게 아닌, 그거와 연관된 모든 데이터를 가져옴 -> 난리남 ..

따라서 모든 연관관계는 지연로딩으로 설정

 

즉시로딩

fetch = FetchType.EAGER

지연로딩

fetch = FetchType.LAZY

 

# 연관 관계 편의 메서드

핵심적으로 컨트롤하는 쪽에 위치

 


실습

 

변경된 domain 내용이 h2에 반영이 안됐음 (접속은 됐음. 이전 상태로 유지됨. Member만 있는 상태)

 

오류1.

Category 에서

items 에 @ManyToMany 했어야 했는데 @ManyToOne 했었음

 

오류2.

1번 해결 후,

8080이 이미 사용중이라고 떴음

 

https://mag1c.tistory.com/114

https://blog.naver.com/PostView.naver?blogId=shinequasar&logNo=222283174204

위 링크 참고 해서 해결

 

-> 해결 방법 : 8080 kill

 

 

-> 해결 완료

 


엔티티 설계 시 주의점

엔티티에는 가급적 setter 사용하지 않기

모든 연관관계는 지연로딩으로 설정

컬렉션은 필드에서 바로 초기화하고 손대지 않기

테이블, 컬럼명 생성 전략

연관관계 편의 메서드

 

'스프링 > [인프런] 실전! 스프링 부트와 JPA 활용1' 카테고리의 다른 글

7. 웹 계층 개발  (0) 2024.03.10
5. 상품 도메인 개발  (0) 2024.03.06
4. 회원 도메인 개발  (0) 2024.03.04
1. 환경 설정  (0) 2024.03.03

관련글 더보기