페치 조인
SQL 조인 종류X
JPQL에서 성능 최적화를 위해 제공하는 기능
연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능
join fetch 명령어 사용 페치 조인 ::= [ LEFT [OUTER] | INNER ] JOIN FETCH 조인경로
엔티티 페치 조인
회원을 조회하면서 연관된 팀도 함께 조회(SQL 한 번에) SQL을 보면 회원 뿐만 아니라 팀**(T.*)*도 함께 *SELECT
[JPQL] select m from Member m join fetch m.team
마치 member만 조회한것같지만,...
행동 패턴 참조전체 참조
메멘토 패턴
중재자 패턴
반복자 패턴
커맨드 패턴
책임 연쇄 패턴
책임 연쇄 패턴사용 상황 요약책임 연쇄 패턴은 핸들러들의 체인(사슬)을 따라 요청을 전달할 수 있게 해주는 행동 디자인 패턴입니다. 각 핸들러는 요청을 받으면 요청을 처리할지 아니면 체인의 다음 핸들러로 전달할지를 결정합니다.
책임 연쇄 패턴이란? 책임 연쇄 패턴은 특정 행동들을 핸들러라는 독립 실행형 객체들로 변환합니다. 당신의 앱의 경우 각 검사는 검사를 수행하는 단일 메서드가 있는 자체 클래스로 추출되어야 합니다. 이제 요청은 데이...
JPA는 다양한 퀴리 방법 지원
JPQL
JPA Criteria
QueryDSL
네이티브 SQL
JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용
JPQL
기초 반드시 숙달
가장 단순한 조회방법
검색할때도, 테이블이 아닌 엔티티 객체를 대상으로 검색
모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능
애플리케이션이 필요한 데이터만 DB에서 불러올려면, 검색 조건이 포함된 SQL 문 필요
JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공
JPQL은 엔티티를 대상으...
값 타입
중요한것
임베디드 타입(복합 값 타입)
값 타입 컬렉션
기본값 타입JPA의 데이터 타입 분류엔티티 타입
@Entity로 정의하는 객체
데이터가 변해도 식별자로 지속해서 추적 가능
예) 회원엔티티의 키나 나이값을 변경해도 식별자로인식가능(id값은 변하지않으니까)
값 타입
int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체
식별자가 없고 값만 있으므로 변경시 추적 불가
엔티티의 생명주기를 따라감(엔티티죽으면다죽음)
예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 ...
프록시왜?(Member : Team = N : 1)Member를 조회할때 Team도 함께 조회해야 할까?
비즈니스 로직에 따라다르다.
거의 항상 Member를 불러낸후, team의 정보와 같이 출력하는 비즈니스 로직있다면,Team정보까지 쿼리 한번에 가져오는 것이 좋다
Member만 쓰고, Team을 가끔 쓰는경우,Member만 쿼리로 호출하는것이 좋음
JPA에서는 즉시 로딩과 지연 로딩을 활용하여, 문제해결
프록시 기초
em.find() vs em.getReference()
find()는 진짜 엔티티 객체를 반환함
get...
상속관계 매핑RDB는 물리모델 , 객체의 상속관계는 논리모델JPA는 어떤 물리모델을 갖던, 객체로의 논리모델 지원한다.
특징
관계형 데이터베이스는 상속 관계 X
RDB에는 대신 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사
객체에서는 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑
조인 전략
Insert 할때는 2번이 일어나며, 조회를 할때는 pk, fk값으로 조인해서 가져오고, DTYPE을 정해서 해당하는 table과의 조인을한다.
주요 에너테이션
@Inheritance(strate...
ResponseBodyAdvice에서 ClassCastException 발생String 클래스를 반환하는 컨트롤러의 매서드에서 문제 발생
이슈 상황기대
Controller(@RestController 포함)에서 응답 return 시, ResponseBodyAdvice의 구현체 코드 중 beforeBodyWrite() 실행되어, JsonResponse 객체를 Json형식으로 유저에게 응답
현실
아래 조건에서 java.lang.ClassCastException 에러발생
ResponseBodyAdvice의 구현체 코드 중 일부
...
연관관계 시 고려사항 3가지
다중성
단방향, 양방향
연관관계의 주인
다중성설계시 DB기준으로 어떻게 할지 생각해보고, 외래키를 두자, 외래키는 N 쪽에 두자!햇갈린다면, 생각하고있던 서로의 위치를 바꿔도 적절한지 확인(다대일 -> 일대다)
다대일 @ManyToOne
일대다 @OneToMany
일대일 @OneToOne
다대다 @ManyToMany
실무에서 안씀
단방향, 양방향
테이블
외래 키 하나로 양쪽조인 가능
방향이라는 개념없음
객체
참조용 필드가 있는 쪽만 참조가능
한쪽만 참조하면 단방향
양쪽이 서로 참조...
목표foreignkey를 직접쓰는게 아니라 객체 지향적으로!! 짜기
객체와 테이블 연관관계의 차이를 이해
객체의 참조와 테이블의 외래 키를 매핑
용어이해
방향(Direction): 단방향, 양방향
다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1),
다대다(N:M) 이해
연관관계의 주인(Owner): 객체 양방향 연관관계는 관리 주인 이 필요
RDB 기준 설계의 문제점
객체 지향적으로 안되어있기때문에, 각 fk를 알고, 직접 find해와야함
123456789101112131415...
엔티티 매핑엔티티 매핑 소개
객체와 테이블 매핑: @Entity, @Table
필드와 컬럼 매핑: @Column
기본 키 매핑: @Id
연관관계 매핑: @ManyToOne,@JoinColumn
@Entity
@Entity가 붙은 클래스는 JPA가 관리, 엔티티라고 한다.
주의
기본 생성자 필수(파라미터 없는 protected 이상의 생성자)
final 클래스, enum, interface, inner 클래스 사용 X
저장할 필드에 final 사용 X
@Table
@Table은 엔티티와 매핑할 테이블 지정
DB에서 활용할...