1. Query Lookup Strategies
@EnableJpaRepositories (queryLookupStrategy)
queryLookupStrategy 옵션
|
설명 |
CREATE_IF_NOT_FOUND (기본값) |
선언된 쿼리(@Query 등)이 있으면 사용하고, 없으면 메서드 이름 기반으로 쿼리 생성
|
CREATE |
무조건 메서드 이름 기반으로 쿼리 생성 (어노테이션 선언 무시)
|
USE_DECLARED_QUERY |
선언된 쿼리(@Query 등)만 사용, 없으면 애플리케이션 시작 시 예외 발생
|
2. Query Creation
Query Builder 기반 생성
- 메서드 이름을 추론하여 JPQL Query를 생성합니다.
Parsing Query Method Name
요소 | 설명 | 예시 |
subject | 쿼리 목적 (메서드 도입부) |
find, read, query, count, delete, exists
|
limit | 결과 제한 |
findTop3By, findFirstBy, findDistinctBy
|
predicate | 조건 정의 (By 이후) |
findByUsernameAndAge, findByStatusOrRole
|
연산자 | 조건 연산자 사용 |
Between, LessThan, GreaterThan, Like 등
|
order | 정렬 지정 |
OrderByAgeAsc, OrderByCreatedDateDesc
|
대소문자 무시 | 대소문자 무시 검색 |
findByNameIgnoreCase, findByEmailAllIgnoreCase
|
예제
더보기
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);
}
Property Expressions
- 메서드 이름에서 엔티티 속성을 접근이 가능함
구분 | 설명 |
기본 속성 접근 | 엔티티의 직접 속성을 기준으로 탐색 |
중첩 속성 접근 | 엔티티 내부에 포함된 객체의 속성까지 탐색 |
전체 속성 해석 | 메서드 이름 전체를 하나의 속성으로 해석 시도 |
부분 속성 해석 | 오른쪽부터 camelCase로 나누어 부분 속성 해석 (재귀적) |
예제
더보기
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@Embedded
private Address address;
// Getter, Setter
}
@Embeddable
public class Address {
private String city;
private String street;
private String zipCode;
// Getter, Setter
}
// 기본 속성 접근
findByUsername(String username)
// 중첩 속성 접근
findByAddressZipCode(ZipCode zipCode)
// 전체 속성 해석
findByAddressZipCode → addressZipCode 라는 단일 속성으로 시도
// 부분 속성 해석
findByAddressZipCode → address.zipCode 로 나눠서 탐색
출처
'Spring > Spring Data JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 10-3. 객체지향 쿼리 언어: QueryDSL (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 (1) | 2024.08.02 |
[자바 ORM 표준 JPA 프로그래밍] 8. 프록시와 연관관계 관리 (0) | 2023.12.28 |