1) 오늘 학습한 내용
- Cascade
- orphanRemoval
- Fetch
- JpaRepository
- 페이징
- JPQL
- Cascade (영속성 전이)
- 사용위치 : 연관관계의 주인 반대편 - 부모 엔티티 (N대1 에서 1), (OneToMany or OneToOne)
- 양쪽 엔티티의 라이프 사이클이 동일하거나 비슷해야한다.
- 옵션 종류
- ALL : 전체 상태 전이
- PERSIST : 저장 상태 전이
- REMOVE : 삭제 상태 전이
- MERGE : 업데이트 상태 전이
- REFERESH : 갱신 상태 전이
- DETACH : 비영속성 상태 전이
- orphanRemoval (고아 객체 제거)
- 사용위치 : OneToMany or OneToOne에서 사용 - 부모 엔티티
- Cascade.REMOVE와 비슷한 용도로 삭제를 전파하는데 쓰인다.
- 부모 객체에서 리스트 요소 삭제를 했을 경우 해당 자식 객체는 매핑 정도가 없어지므로 대신 삭제해준다.
- 요건 DB에서는 절대 알 수 없는 행동.
- orphanRemoval = true 는 리스트 요소로써의 영속성 전이도 해준다는 뜻
- Fetch (조회시점)
- 사용위치 : Entity에 FetchType으로 설정할 수 있다.
- Query 수행 시 fetch join을 통해서 LAZY인 경우 즉시 불러올 수 있다.
- 기본 LAZY를 설정한 뒤에 필요할 때만 fetch join을 수행.
- 항상 같이 쓰는 연관관계일 경우 EAGER을 설정.
- 옵션
- EAGER : 즉시 로딩 (부모 조회 시 자식도 같이 조회)
- LAZY : 지연 로딩 (자식은 필요할 때 따로 조회)
- JpaRepository
- JpaRepository<Entity, Id> 인터페이스를 인터페이스에 extends 붙인다.
- @NotRepositoryBean(빈생성 막음) 된 상위 인터페이스들의 기능을 포함한 구현체가 프로그래밍된다.
- SpringDateJpa에 의해 엔티티의 CRUD, 페이징, 정렬 기능 메소드들을 가진 빈이 등록된다.
- 페이징
- PageRequest 를 사용하여 Pageable에 페이징 정보를 담아 객체화 한다.
- Pageable을 JpaRepository가 상속된 인터페이스의 메서드에 T<Entity>와 함께 파라미터로 전달한다.
- 2번의 메서드의 return 으로 Page<T>가 응답 된다.
- 응답된 Page<T>에 담겨진 Page 정보를 바탕으로 로직을 처리하면 된다.
- Pageable
- 페이징을 제공하는 중요한 인터페이스이다.
- 페이징의 findAll()의 기본적인 반환 메서드로 여러 반환 타입 중 하나이다.
- Page<T> 타입
- 게시판 형태의 페이징에서 사용된다.
- 전체 요소 갯수도 함께 조회한다.
- Slice<T> 타입
- 더보기 형태의 페이징에서 사용된다.
- 전체 요소 갯수 대신 offset 필드로 조회할 수 있다.
- List<T> 타입
- 전체 목록보기 형태의 페이징에서 사용된다.
- 기본 타입으로 count 조회가 발생하지 않는다.
- JPQL
- Table이 아닌 객체 기준으로 작성하는 쿼리를 JPQL 이라고 한다.
- SQL : Table 명으로 쿼리짤 때 쓰이는 언어
- JPQL : Entity 명으로 쿼리 짤 때 쓰이는 언어
- 쿼리 문자열과 Entity 를 직접 넣어서 쿼리를 작성한다.
- @Query
- 인자값으로 간단하게 쿼리를 작성할 수 있다.
- 쿼리를 작성할 때 테이블명이 아니라 entity 명으로 조회하게 됩니다.
- 인자값으로 간단하게 쿼리를 작성할 수 있다.
'TIL > Spring' 카테고리의 다른 글
TIL 2025-01-13 (Redis) (0) | 2025.01.13 |
---|---|
TIL 2024-12-17 ( 5주차 - 데이터베이스 다루기 ) (0) | 2024.12.17 |
TIL 2024-12-10 ( 2-3주차 - 데이터베이스 다루기 ) (0) | 2024.12.10 |
TIL 2024-11-27 (Spring 심화 - 활용) (1) | 2024.11.27 |
TIL 2024-11-26 (Spring 심화) (0) | 2024.11.26 |