도메인 분석 설계
설계
- 1:N에서 N이 주인. 외래키가 있는 곳을 주인으로
엔티티 클래스 개발
- 연관관계 주인이 아닌 경우 @OneToMany(mappedBy = "member")
- 상속 엔티티
- 상속 관계에서 상속 table type 전략을 정해줘야함.
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
- 자식들을 하나의 테이블에 생성
@DiscriminatorColumn(name = "dtype") @DiscriminatorValue("A")
- 상속 관계에서 상속 table type 전략을 정해줘야함.
- Enum
@Enumerated(EnumType.String)
- 1대1 관계에서 주인? - 주인을 어디에 둬도 상관 없음
- tip) access를 많이 하는 곳에 두자.
- N대N 관계 - 실무에선 X
- JoinColumn이 아닌 JoinTable 사용
- 중간 테이블이 필요함.
엔티티 설계 주의점
- (중요)모든 연관관계는 지연 로딩(LAZY) 설정
- 즉시로딩은 한번에 연관된 디비를 다 가져옴.
- 100번 조회하면 100번 다 한 번씩 가져옴
- 즉시로딩(EAGER) 은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어려움
- fetch = LAZY로 하자.
- 연관된 엔티티를 함께 디비에서 조회해야 한다면 fetch join 을 사용하자. 또는 엔티티 그래프
ToMany는 기본이 LAZY, but **ToOne은 기본이 EAGER**여서 LAZY로 바꿔줘야함!
- 즉시로딩은 한번에 연관된 디비를 다 가져옴.
- 컬렉션은 필드에서 초기화하고 건들지 말자. (hibernate 관련)
- List<> li = new ArrayList<>();
- casecade
- persist를 하나만하면 다됨.
- 연관관계 편의 메소드
- 양방향 관계에서 서로 지정을 해줘야하므로 메서드를 이용하자.
- 핵심적으로 컨트롤 하는 곳에 메서드를 만들자. (Order에다가)
-
//== 연관관계 메서드 ==// public void setMember(Member member){ this.member = member; member.getOrders().add(this); }
애플리케이션 아키텍처
패키지 구조
- domain
- exception
- repository
- service
- web
개발 순서: 엔티티 -> 리포지토리 -> 서비스
'개발 > Spring' 카테고리의 다른 글
[JPA] 변경감지(dirty checking)와 병합(merge) (0) | 2021.09.06 |
---|---|
[JPA] 도메인 및 웹 계층 개발 (0) | 2021.09.06 |
[JPA] SpringBoot JPA 프로젝트 설정 (0) | 2021.09.06 |
[IntelliJ] tdd 라이브 템플릿 (0) | 2021.08.24 |
[SpringBoot] 게시판 만들기 필요 클래스 및 동작 (0) | 2021.08.17 |
댓글