- JPA / Hibernate ORM / Spring Data JPA
- JPA는 엔터프라이즈 Java 애플리케이션에서 관계형 데이터베이스를 사용하기 위해 정해 놓은 표준 스펙 (기술 명세)
- Hibernate ORM 은 JPA라는 표준 스펙을 구현한 구편체, 실제 사용할 수 있는 API
- Spring Data JPA는 JPA 스텍을 구현한 구현체의 API를 조금 더 쉽게 사용할 수 있도록 해주는 모듈
- Member 엔티티 클래스
- (1) 회원의 상태를 저정하기 위해 추가된 enum 필드 처음 등록 기본 값은 MEMBER_ACTIVE
- (2)는 (1)에서 정의된 memberStatus 에서 사용하는 enum
- Coffee 엔티티 클래스
- Order 엔티티 클래스
- MemberRepository
- (1)과 같이
CrudRepository
대신JpaRepository
를 상속
- CoffeeRepository
- (2) JPA에서는 복잡한 검색 조건을 지정하기 위한 몇 가지 방법 제공
- JPQL을 통한 객체 지향 쿼리 사용
- JPA에서는 JPQL이라는 객체 지향 쿼리를 통해 데이터베이스 내의 테이블 조회 가능
- JPQL은 데이터베이스의 테이블을 대상으로 조회하는 것이 아니라 엔티티 클래스의 객체를 대상으로 객체를 조회하는 방법
- JPQL을 사용해서 객체를 조회하면 JPA가 내부적으로 분석해서 SQL을 만들어 데이터베이스를 조회하고, 그 결과를 엔티티 객체로 매핑한 뒤에 반환
- (2-3)은 JPQL을 사용해서 coffeeId에 해당하는 커피 정보 조회
- 객체를 대상으로 한 조회이기 때문에 COFFEE 테이블이 아니라 Coffee 클래스 라는 객체 지정, coffee_id 컬럼이 아닌 coffeeId 필드를 지정해야 한다.
c
는 Coffee 클래스의 별칭이기 때문에 "SELECT c FROM ~" 과 같이 SQL에서 사용하는*
이 아니라c
로 모든 필드를 조회하는 것.- (2-1) 과 같이
SELECT c
를 생략한 형태로 사용 가능- 네이티브 SQL을 통한 조회
- SQL쿼리로도 작성 가능 (2-2) 의 nativeQuery 애트리뷰트의 값을 true로 설정하면 쿼리 적용
@Query
패키지 경로 주의
- OrderRepository
- MemberService
- CoffeeService
- OrderService