본문 바로가기

spring data jpa6

일대다(1:N) 페이징 처리(OneToMany Pagination) 일대다(1:N) 페이징 처리(Spring Data JPA) TL;DR 1:N 연관관계인 두 엔티티가 즉시 로딩된다면 (엔티티 그래프나 fetch join 으로 연결되어 있다면) 페이징 처리시 쿼리에 limit 가 붙지 않고 모든 데이터가 메모리에 불러와진다. 페이징 처리를 위해서는 연관된 컬렉션을 한꺼번에 가져올 배치 사이즈를 정한다. (예시: 100개로 정하기) spring: jpa: properties: hibernate: default_batch_fetch_size: 100 요구사항 어드민 화면에서 모든 사용자의 주문내역을 불러오는 화면이 필요합니다. 우리는 수많은 주문들을 한 화면에 불러오기 보다는 페이징 처리를 통해 한번에 필요한 갯수만큼 가져오겠습니다. Entity 연관관계 주문과 주문상품이 .. 2021. 11. 28.
Spring Data JPA - Auditing Spring Data JPA 014 - Auditing Auditing은 생성일자, 생성자, 수정일자, 수정자를 자동으로 등록할 수 있도록 도와준다. 엔티티의 변경 시점에 위 정보를 기록하는 기능이다. 예제를 보자. @Getter @Setter @Entity @EntityListeners(AuditingEntityListener.class) public class Comment { @Id @GeneratedValue private Long id; private String comment; @ManyToOne(fetch = FetchType.LAZY) private Post post; ... @CreatedDate private Date created; @CreatedBy @ManyToOne private.. 2021. 2. 11.
Spring Data JPA - 여러 기능 2 Spring Data JPA - 여러가지 기능 2 Projection project 란 릴레이션에서 select 할 때 원하는 컬럼 가져오는 것이다. select * from table 처럼 모두를 가져올 수도 있고, 아니면 컬럼 이름을 적어서 일부만 가져올 수도 있다. Closed 프로젝션 인터페이스 기반 프로젝션과 클래스 기반 프로젝션이 있는데, 인터페이스 기반을 먼저 해보자. 조금 더 코드가 덜 많다. 클로즈드 프로젝션은 원하는 attribute 만 선택해서 가져오는 것이므로 쿼리의 성능을 최적화 할 수 있다. public interface CommentSummary { String getComment(); int getUp(); int getDown(); } public interface Comm.. 2021. 2. 11.
Spring Data Common - 쿼리(Query) Spring Data JPA - Spring Data Common Query Spring Data 저장소의 메소드 이름으로 쿼리를 만들 수 있다. 1) 메소드 이름을 분석해서 쿼리를 만든다. (CREATE) 2) 미리 정의해 둔 쿼리를 찾아 사용한다. (USE_DECLARED_QUERY) 3) 미리 정의한 쿼리를 찾아보고 없으면 생성한다. (CREATE_IF_NOT_FOUND) 아래와 같이 설정할 수 있다. @SpringBootApplication @EnableJpaRepositories(queryLookupStrategy = QueryLookupStrategy.Key.CREATE_IF_NOT_FOUND) public class Application { ... 기본값은 CREATE_IF_NOT_FOUND.. 2021. 2. 9.
Spring Data Common - Repository Spring Data Common Spring data 안에는 Spring data Common, Spring data REST 가 있고, JPA, JDBC, KeyValue, MongoDB, Redis 등이 있다. 스프링 데이터는 SQL, NoSQL 저장소를 지원하는 프로젝트의 묶음이다. 스프링 데이터 Common 은 여러 저장소를 지원하는 프로젝트의 공통 기능을 제공해준다. 스프링 데이터 REST 는 저장소의 데이터를 하이퍼미디어 기반 HTTP 리소스로(REST API로) 제공한다. 그리고, 스프링 데이터 JPA는 스프링 데이터 Common이 제공하는 기능에 JPA 관련 기능을 추가한 것이다. Spring Data Common (Spring data Common) Repository - 마커용 인터페.. 2021. 2. 8.
JPA 기본 - cascade, fetch, query JPA Cascade Cascade란 엔티티 상태를 전파시키는 옵션이다. 엔터티 상태란 다음 4가지를 말한다. Transient : 객체가 단지 선언되고 생성만 되었을 뿐 JPA 는 알지 못하는 상태다. Persistent : JPA가 관리중인 상태다. 예를 들어 Session.save() 할 때 이 상태가된다. Session 같은 PersistentContext 에 객체를 넣어준다. 그 외에 하이버네이트가 1차 캐시, Dirty Checking, Write Behind 등을 관리한다. 1차 캐시 : 객체 상태를 캐시에 저장한다. 예를 들어 이미 캐시에 어떤 데이터가 존재하면 load 명령을 해도 굳이 DB에서 가져오지 않고 있던 값을 사용하여 성능을 끌어올린다. Dirty Checking : 객체의 변.. 2021. 2. 7.
728x90