QueryDSL의 Predicate와 유사하다.
이 기능을 사용하기 위해서는 의존성을 추가해줘야한다.
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
</dependency>
maven plugin 설정도 해준다.
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<version>2.0.5</version>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<processors>
<processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
</processors>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>${hibernate.version}</version>
</dependency>
</dependencies>
</plugin>
IntelliJ의 Preference > Build, Execution, Deployment > Compiler > Annotation Processors에서 'Enable annotation processing'을 체크하고, 하단에 org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
를 추가해준다.
그 후, Maven clean을 하고, 프로젝트 build를 해주면 엔티티마다 annotation 코드가 생성됨을 볼 수 있다.
그리고 Repository에 JpaSpecificationExecutor<"엔티티 이름">
을 extends 해준다.
그 다음에 spec을 정의해주어야한다.
예를 들어 아래의 코드는 Comment의 best가 true인지 확인하는 것이다.
비슷하게, Comment의 up이 10개 이상이면 좋은 comment라는 것을 판별하는 spec도 정의해준다.
spec은 아래와 같이 사용한다.
where절에 해당 조건이 잘 들어감을 볼 수 있다.
아래와 같이 or이나 and로 연결할 수도 있다.
Paging도 가능하다.