본문 바로가기

Spring/JPA10

#10 객체지향 쿼리 언어 객체지향 쿼리 언어 JPA는 복잡한 검색 조건을 사용해서 엔티티 객체를 조회할 수 있는 다양한 쿼리 기술을 지원한다. JPA에서 사용할 수 있는 쿼리 기술은 다음과 같다. ● JPQL ● Criteria ● QureyDSL ● 네이티브 SQL JPQL은 가장 중요한 객체지향 쿼리 언어다. Critera나 QureyDSL은 결국 JPQL을 편리하게 사용하도록 도와주는 기술이므로 JPQL 학습은 필수적이다. 1. JPQL 소개 JPQL의 특징은 다음과 같다. ● JPQL은 객체지향 쿼리 언어다. ◎ 따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. ● JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. ● JPQL은 결국 SQL로 변환된다. JPQL의 기.. 2021. 9. 1.
#9 값 타입 값 타입 JPA의 데이터 타입을 가장 크게 분류하면 엔티티 타입과 값 타입으로 나눌 수 있다. 엔티티 타입은 @Entity로 정의하는 객체이고, 값 타입은 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 말한다. 값 타입은 다음 3가지로 나눌 수 있다. ● 기본값 타입(basic value type) ◎ 자바 기본 타입(int, double 등) ◎ 래퍼 클래스(Integer 등) ● 임베디드 타입(embedded type) ● 컬렉션 값 타입(collection value type) 1. 값 타입 ■ 값 타입의 특징 기본 값 등을 포함한 값 타입의 특징은 다음과 같다. ● 값 타입은 결국 엔티티에 생명주기를 의존한다. ex) Member라는 엔티티가 id, .. 2021. 8. 30.
#8 프록시와 연관관계 관리 프록시와 연관관계 관리 ● 프록시와 즉시 로딩, 지연 로딩 객체는 객체 그래프로 연관된 객체들을 탐색한다. 그런데 객체가 데이터베이스에 저장되어 있으므로 연관된 객체를 마음껏 탐색하기는 어렵다. JPA 구현체들은 이 문제를 해결하려고 프록시라는 기술을 사용한다. 프록시를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있다. ● 영속성 전이와 고아 객체 JPA는 연관된 객체를 함께 저장하거나 함께 삭제할 수 있는 영속성 전이와 고아 객체 제거라는 편리한 기능을 제공한다. 1. 프록시 [Member와 Team] 위 예제와 같이 Member가 Team을 필드로 갖고 있다고 하자. 만약 Member를 데이터 베이스에서 조회하면 이때, Te.. 2021. 8. 29.
#7 고급 매핑 고급 매핑 JPA에서 다음과 같은 복잡한 관계를 매핑하기 위한 여러 방법들이 존재한다. ● 객체의 상속 관계를 데이터베이스에 맞춰 매핑 ● 공통으로 중복되는 값들을 매핑 1. 상속 관계 매핑 관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 대신 슈퍼타입 서브타입 관계(Super-Type Sub-Type Relationship)라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. [슈퍼 타입 서브타입 논리 모델] 오른쪽의 객체 간 상속관계와 유사한 슈퍼 타입 서브타입 관계 모델링은 왼쪽과 같이 구성되어있다. 슈퍼 타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때는 3가지 방법을 선택할 수 있다. ■ 조인 전략 조인 전략은 엔티티 각각을 모두 테이블로 만들고 자식 테.. 2021. 8. 28.