1. Query Lookup Strategies
@EnableJpaRepositories (queryLookupStrategy)
CREATE_IF_NOT_FOUND (default)
- 선언된 쿼리 -> 쿼리 생성 (메서드 이름 기반)
CREATE
- 쿼리 생성
- 메서드 이름 기반 (접두사 제외)
USE_DECLARED_QUERY
- 선언된 쿼리를 찾으려 시도 (어노테이션)
- 찾을 수 없으면 예외 발생 (부트스트랩 시점)
2. Query Creation
Query Builder Mechanism
JPQL Query Creation from method name
interface PersonRepository extends Repository<Person, Long> {
// 여러 조건을 사용한 쿼리
List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
// distinct 플래그를 활성화한 쿼리
List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);
// 개별 속성에 대해 대소문자 무시를 활성화한 쿼리
List<Person> findByLastnameIgnoreCase(String lastname);
// 모든 적합한 속성에 대해 대소문자 무시를 활성화한 쿼리
List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);
// 정적 ORDER BY를 활성화한 쿼리
List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
}
Parsing Query Method Name
subject
- 쿼리 목적 (메서드 도입부)
limit
- 결과 제한 (메서드 도입부 이후)
- Distinct, Top, First
predicate
- 쿼리 조건 (By~)
- 연결 가능 (And, Or)
연산자
- Between, LessThan, GreaterThan, Like
order
- OrderBy~Asc, OrderBy~Desc
대소문자 무시
- IgnoreCase, AllIgnoreCase
3. Property Expressions
- 메서드 이름에서 엔티티 속성 접근 방식
- 기본 속성 접근 or 중첩 속성 접근
List<Person> findByAddressZipCode(ZipCode zipCode);
- 전체 속성 해석: 전체 속성 이름을 하나의 속성으로 시도
- 부분 속성 해석: 오른쪽에서부터 camelCase 부분으로 나누어 시도 -> 나머지 부분 탐색 (재귀적)
출처
'Spring > Spring Data JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 10-4. 객체지향 쿼리 언어: QueryDSL (1) (0) | 2024.08.02 |
---|---|
[Spring Data JPA] 3-1. Defining Query Methods (2) (0) | 2024.08.02 |
[Spring Data JPA] 3-8. Repository query return types (0) | 2024.08.02 |
[Spring Data JPA] 3-7. Repository query keywords (0) | 2024.08.02 |
[자바 ORM 표준 JPA 프로그래밍] 8. 프록시와 연관관계 관리 (0) | 2023.12.28 |