[JPA] Specifications

Junseo Kim·2020년 4월 1일
1

Specifications

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도 가능하다.

0개의 댓글