JPA란? Java Persistence API 자바 진영의 표준 ORM 기술 객체를 컬렉션에 넣어 관리하듯이 데이터베이스를 다룰 수 있게 해준다. 객체를 저장하는 현실적인 대안은 RDB지만, 이를 위해서는 SQL로 직접 객체를 테이블에 매핑시켜줘야 한다. 영속성 컨텍
객체와 테이블 매핑 @Entity @Entity 어노테이션이 붙은 클래스는 JPA가 관리한다. 엔티티 클래스는 JPA 스펙상 public 기본 생성자를 필수로 가지고 있어야 한다. final 클래스, enum, interface, inner클래스는 엔티티가 될 수 없
연관관계 매핑이 필요한 이유 객체지향의 설계 목표는 '자율적인 객체들의 협력 공동체를 만드는 것' 객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력관계를 만들 수 없다. 테이블과 객체는 연관관계에 있어서 패러다임이 아예 다르다. 테이블은 외래키로 조인을
다대일 관계 [N:1] 다대일 단방향 @ManyToOne 가장 많이 사용하는 연관관계 다대일 관계의 반대는 일대다 관계 다대일 양방향 @ManyToOne, @OneToMany(mappedBy=xx) 연관관계의 주인은 외래키가 있는 Member → Team이다. 양쪽을 서로 참조하도록 개발할 수 있다.
상속관계 매핑 관계형 데이터 베이스는 원래 상속 관계를 지원하지 않는다. 대신에 슈퍼타입 서브타입 관계라는 모델링 기법이 그나마 객체 상속과 유사한 모습을 보인다. 따라서 상속관계 매핑이란, 객체의 상속구조와 DB의 슈퍼타입-서브타입 관계를 매핑하는 것을 말한다.
프록시 (proxy) 프록시 기초 entityManager.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 entitiyManager.getReference() : 데이터베이스 조회를 미루는 가짜 엔티티 객체 조회 프록시 특징 JPA 내부적으로 실제 엔티
영속성 전이 특정 엔티티를 영속상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 CASCADE 옵션으로 제어 영속성 전이는 연관관계를 매핑하는 것과 아무 관련이 없다. 엔티티를 영속화할 대 연관된 엔티티도 함께 영속화하는 편리함을 제공할 뿐이다. CASCADE의 종류 ALL : 모두 적용 PERSIST : 영속 REMOVE : 삭제 M...
JPA 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적이 가능하다. 값 타입 단순히 값으로 사용하는 자바 기본 타입이나 객체 별도의 식별자(id)가 없고 값만 존재하므로 변경시 추적이 불가하다. 값 타입 분류 기본 값 타입 원시타입(int, boolean..), 래핑 타입(Strin...
JPQL(객체지향 쿼리 언어) 소개 테이블을 대상으로 쿼리하는 SQL과 달리 엔티티 객체를 대상으로 쿼리할 수 있다. SQL을 추상화했기 때문에 특정 데이터베이스 SQL에 의존하지 않는다. 가장 단순한 조회 방법 EntityManager.find() 객체 그래프 탐색 (a.getB().getC()) 검색을 할 때도 테이블이 아닌 엔티티 객체...
페치 조인(Fetch Join) JPQL에서 성능 최적화를 위해 제공하는 기능 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회할 수 있다. join fetch 엔티티 페치 조인 @OneToOne, @ManyToOne 회원을 조회하면서 연관된 팀도 함께 조회 컬렉션 페치 조인 @OneToMany 팀을 조회하면서 속한 회원 컬렉션을 함께 조회 조인 테이...
김영한님의 실전! Querydsl 강의내용을 정리한 글입니다.intelliJ 사용 시: Gradle Tasks other compileQuerydslconsole 사용 시: ./gradlew clean compileQuerydslQ타입은 컴파일 시점에 자동 생성되므로
검색 조건은 .and(), .or()를 메서드 체인으로 연결할 수 있다.이외에도 .eq, .ne, .isNotNull, .in, .notIn, .between, .goe, .loe, .gt, .lt, .like, .contains, .startsWith 등이 있다.이렇
\-프로젝션이란 객체를 반환하는 것이 아니라, 원하는 필드만 뽑아서 DTO로 반환하는 것을 말한다.프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있다.프로젝션 대상이 둘 이상이면 튜블이나 DTO로 조회1) 프로퍼티 접근2) 필드 직접 접근2-1) 별칭이 다를때프로퍼
page, pageable을 활용해보자.전체 카운트를 한번에 조회하는 단순한 방법데이터 내용과 전체 카운트를 별도로 조회하는 방법querydsl이 제공하는 fetchResults()를 사용하면 내용과 전체 카운트를 한번에 조회할 수 있다.실제 쿼리는 2번 호출된다.fe
배경 데이터베이스는 조건문으로 검색할 때, 테이블 전체를 full scan으로 탐색한다. 이러한 탐색 방식은 데이터가 많아지면 많아질 수록 비효율적인 방식이라는 것을 알 수 있을 것이다. 이러한 비효율을 해소하기 위해 인덱스 테이블을 활용할 수 있다. 인덱스는 B-Tree 자료구조를 사용해서 구성된다고 한다.B-Tree알고리즘이 궁금하다면 여기를 참고하...