본문 바로가기

jpa11

자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (9) 값 타입 JPA에서 다루는 값 타입에 대한 개념을 정리한다. 자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (9) 값 타입 값 타입 9.1 기본값 타입 Member -> id -> 식별자 값 // name, age 속성은 식별자 값도 없고 생명주기도 Member 엔티티에 의존함. 엔티티 인스턴스를 제거하면 name, age 값도 제거되므로 값 타입은 공유하면 안됨 9.2 임베디드 타입 (복합 값 타입) JPA에서 임베디드 타입이란 새로운 값 타입을 직접 정의해서 사용하는 것 직접 정의한 임베디드 타입도 int, String과 같이 값 타입이다. 회원 엔티티 정보에서 예를들어 근무 시작일과 우편번호는 서로 아무 관련이 없음 이럴때 @Embedded 을 사용하여 더욱 의미있고 응집력 있게 변경 할 수 있다... 2022. 9. 18.
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (8-2) 프록시와 연관관계 관리 자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (8-2) 프록시와 연관관계 관리 들어가며 8강은 1편과 2편으로 나눠 진행하였다. 8.3 지연 로딩 활용 연관된 관계 끼리 자주 함께 사용 -> 즉시 로딩 설정 가끔 사용 -> 지연 로딩 설정 8.3.1 프록시와 컬렉션 래퍼 지연 로딩 설정 시 실제 엔티티 대신 프록시 객체를 사용하며, 프록시 객체는 실제 자신이 사용될 때까지 데이터베이스를 조회하지 않음 하이버네이트는 엔티티를 영속 상태로 만들 때 엔티티에 컬렉션이 있으면 컬렉션을 추적하고 관리할 목적으로 원본 컬렉션을 하이버네이트가 제공하는 내장 컬렉션으로 변경하는데 이것을 컬렉션 래퍼라 함. (출력 결과를 보면 org.hibernate.collection.internal.PersistentBa.. 2022. 9. 10.
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (7-1) 고급매핑 들어가며 7강은 1편과 2편으로 나눠 진행하였다. 7.1 상속 관계 매핑 관계형 디비에는 객체지향 언어에서 다루는 상속 개념이 없다 대신 슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속 개념과 가장 유사 ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 디비의 슈퍼타입 서브타입 관계를 매핑하는 것 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현 시 3가지 방법 존재 각각의 테이블로 변환 : 각각을 모두 테이블로 만들고 조회할 때 조인을 사용 (JPA에서는 조인 전략이라 함) 통합 테이블로 변환 : 테이블을 하나만 사용해서 통합 (JPA에서는 단일 테이블 전략이라 함) 서브타입 테이블로 변환 : 서브 타입마다 하나의 테이블을 만든다 (JPA에서는 구현 클래스마다 테이블 전략이라.. 2022. 8. 17.
JPA - N+1 문제와 해결방법 정리 들어가며 JPA를 사용하다 보면 N+1 문제를 한번씩은 겪어봤을것이다. 하지만 콘솔창을 자세히 보지 않았다면 그냥 지나쳤을 수도 있다. N+1의 문제가 발생한다고 해서 결과에 문제가 생기는 것은 아니지만 성능에는 문제가 생길 수 있기 때문에 확실히 인지해서 문제를 해결하는 것이 좋다. N+1 문제란 무엇인가? 연관관계가 설정된 엔티티를 조회할 때 조회 된 데이터의 갯수만큼 조회 쿼리가 추가로 발생하는 경우는 말한다. 이해를 돕기 위해 예를 들면 팀과 회원의 연관관계에서 팀을 조회했을때 팀에 속한 회원이 10명 있다고 가정할때 팀을 조회할때 연관관계를 가지고 있는 회원을 조회하는 쿼리가 10번(n번) 발생하는 것을 의미한다. N+1 == 10번(회원) + 1번(팀) Fetch 모드에 따른 결과 (즉시 로딩.. 2022. 8. 9.
Spring Data JPA - Pageable을 이용한 Pagenation 처리 방법 들어가며 API를 만들다보면 모든 정보를 한번에 전달하는 것이 아닌 일부분만 전달해줘야하는 경우가 있다. 예를 들어 게시판과 같은 여러 글이 있는 게시글들의 정보를 전달할때이다. Spring-Data-JPA에서는 Pageable이라는 객체를 제공하여 해당 기능을 편리하게 사용할 수 있도록 도와준다. 개념과 사용 방식에 대해서 정리한다. Pagenation ? 게시판의 글을 보여줄 때 모든 글을 한번에 보여주는 것이 아닌 페이지별로 글을 나눠서 쪽수별로 보여준다. 정렬 방식 또한 설정 가능하다. 이처럼 요청한 페이지의 숫자와 총 몇페이지 또는 정렬 방식 등등 요청에 따라 정보를 전달해주는 것이 Pagenation이다. Pageable이란? 이러한 기능을 개발자가 직접 개발을 해서 이용할 수도 있지만 JPA.. 2022. 7. 17.