1장. 연관관계
__항목 1: @OneToMany 연관관계를 효과적으로 구성하는 방법
____항상 부모 측에서 자식 측으로 전이를 사용
____부모 측에 mappedBy 지정
____부모 측에 orphanRemoval 지정
____연관관계의 양측을 동기화 상태로 유지
____equals(와 hashCode( 오버라이딩
____연관관계 양측에서 지연 로딩 사용
____toString( 오버라이딩 방법에 주의
____@JoinColumn을 사용해 조인 칼럼 지정
____Author 및 Book 샘플 코드
__항목 2: 단방향 @OneToMany 연관관계를 피해야 하는 이유
____일반적인 단방향 @OneToMany
____@OrderColumn 사용
____@JoinColumn 사용
__항목 3: 단방향 @ManyToOne의 효율성
____특정 저자에게 새 도서 추가
____저자의 모든 도서 가져오기
____저자의 도서 페이징 처리
____저자의 모든 도서 가져오기와 새로운 도서 추가
____저자의 모든 도서 가져오기와 도서 삭제
__항목 4: @ManyToMany 연관관계를 효과적으로 구성하는 방법
____관계의 오너 선택
____항상 List가 아닌 Set 사용
____연관관계의 양측 동기화 상태 유지
____CascadeType.ALL 및 CascadeType.REMOVE 사용하지 않기
____조인 테이블 설정
____연관관계 양측에서 지연 로딩 사용
____equals( 및 hashCode( 오버라이딩
____toString( 오버라이딩 방법에 주의
____Author 및 Book 샘플 코드
__항목 5: @ManyToMany에서 Set이 List보다 나은 이유
____List 사용
____Set 사용
__항목 6: CascadeType.REMOVE 및 orphanRemoval=true를 사용해 하위 엔터티 제거를 피해야 하는 이유와 시기
____영속성 콘텍스트에 이미 로드된 저자 삭제
___
이 책에서 다루는 내용
스프링, 스프링 부트, 하이버네이트를 사용해 자바에서 데이터 유지하는 방법
더티 트래킹 활성화 방법
다대다 연관관계를 효율적으로 구성하고 List와 Set 선택을 결정하는 방법
MySQL을 통한 데이터 스트리밍 방법
단일 SELECT로 부모 측과 연관관계를 효율적으로 가져오는 방법
포크(fork/조인(join 프레임워크를 통한 배치 파일 처리 방법
컬렉션 및 커넥션 작업 방법
쿼리, 잠금, 스키마, 하이버네이트 타입에 대한 처리 방법
지은이의 말
간단히 말해 이 책은 스프링 부트 애플리케이션의 자바 영속성(Persistence 성능에 대한 모범 사례 모음집이다. 모범 사례는 120개 이상의 항목을 통해 제공되며, 다음과 같이 3가지 범주로 분류된다.
첫째, 엔터티 정의, 관계 매핑, 쿼리 작성, 데이터 가져오기, 식별자(identifier 생성기(generator 선택 등에 대한 모범 사례를 다룬다. 주로 스프링 부트 기본 제공 아티팩트(artifact로 도움을 받을 수 없는 영역과 수정이 어렵고 도메인 모델에 상당한 변경을 필요로 하는 심각한 성능 저하 방지를 다룬다.
둘째, 스프링 부트 지원 기능(더 정확하게는 스프링 데이터 사용을 위한 모범 사례를 다룬다. 기본 지원 기능의 묘책을 활용하다 보면 성능이 저하될 수 있다. 예를 들어 OSIV(Open Session in View, 오프셋 페이지네이션(offset pagination, 커밋 후 후크(post-commits hook, @Transactional에 대한 오해는 다루는 주제 중 일부에 불과하다. 여러분은 이 범위 항목들에 뛰어들 준비가 돼 있고 흥미를 느낄 것이라 확신한다.
셋째, 애플리케이션의 성능을 유지할 수 있는 몇 가지 하이버네이트 기능을 자세히 알아본다. 기본적으로 스프링 데이터는 영속성 공급자로, 하이버네이트를 사용하기에 스프링 데이터를 통해 하이버네이트를 활용할 수 있을 뿐만 아니라 하이버네이트 자체로도 활용할 수