본문으로 건너뛰기

Q Class / Specification 가이드

1. 개요

ElastiCORE는 엔티티 정의를 기반으로 Q 클래스를 자동 생성합니다. Q 클래스는 JPA Specification 패턴을 래핑하여 타입 안전한 동적 쿼리를 구성할 수 있게 해주는 핵심 도구입니다.

Q 클래스가 제공하는 기능

  • 타입 안전한 조건 빌더: 컴파일 타임에 필드명과 타입을 검증합니다.
  • JoinSpec: 조인, 프로젝션, 서브쿼리를 지원하는 고급 조회 빌더입니다.
  • UpdateSpec: WHERE 조건 기반의 벌크 업데이트를 수행합니다.
  • DeleteSpec: WHERE 조건 기반의 벌크 삭제를 수행합니다.
  • checkEmpty 패턴: null이나 빈 값을 자동으로 무시하여 선택적 조건을 간결하게 처리합니다.
Q 클래스는 언제 사용하나요?

Spring Data JPA의 JpaSpecificationExecutor를 사용하는 모든 동적 검색 시나리오에서 Q 클래스를 활용할 수 있습니다. 특히 검색 조건이 사용자 입력에 따라 유동적으로 변하는 경우에 강력한 효과를 발휘합니다.


2. Q 클래스 구조

생성 원리

ElastiCORE는 env.yml에 설정된 q 네임스페이스에 따라 도메인별 Q.java 파일을 자동 생성합니다. 각 엔티티마다 내부 클래스가 만들어지며, 엔티티의 필드 정보와 조건 메서드가 포함됩니다.

Q 클래스 자동 생성 구조

public class Q {

// 엔티티별 싱글턴 인스턴스
public static $Article<Article> Article = new $Article<>();
public static $User<User> User = new $User<>();
... 43 lines omitted
}
}
... 96 lines omitted
}
... 2 lines omitted
}
... 2 lines omitted
}
... 28 lines omitted
}
... 9 lines omitted
}
... 7 lines omitted
}
}
... 180 lines omitted
}
... 14 lines omitted
}
}
... 199 lines omitted
}
... 97 lines omitted
}
... 21 lines omitted
}
... 5 lines omitted
}
}
... 704 more lines (761 total - use Read tool for full file)