- 참조: 자바 ORM 표준 JPA 프로그래밍
- 메소드 위임
메소드 위임을 사용하면 쿼리 타입에 검색 조건을 직접 정의할 수 있다.
public class MemberExpression {
@QueryDelegate(Member.class)
public static BooleanExpression isAdult(QMember member) {
return member.age.gt(19);
}
}
Member 엔티티가 성인인지를 판단하는 검색조건을 추가해본다고 가정하자.
메소드 위임 기능을 사용하려면 static 메소드를 만들고 @QueryDelegate 어노테이션을 지정한다. 어노테이션 인자에는 해당 기능을 적용할 엔티티를 설정한다. 메소드의 첫번째 파라미터에는 Q-type 을 지정하고 나머지는 필요한 파라미터를 작성한다.
예제에서는 단순하게 Member 의 나이가 19 초과인지를 쿼리하기 위해 파라미터가 필요 없어 지정하지 않았지만 파라미터가 필요한 메소드라면 추가로 파라미터를 주면된다.
@Generated("com.querydsl.codegen.EntitySerializer")
public class QMember extends EntityPathBase<Member> {
.................
public BooleanExpression isAdult() {
return MemberExpression.isAdult(this);
}
작성 후 Q-type 을 보면 정의한 메소드가 생성되었을 것이다. 메소드 위임 기능을 사용해서 19살 초과인 Member 들만 질의해보자.
JPAQueryFactory query = new JPAQueryFactory(em);
QMember m = new QMember("m");
List<Member> members = query.select(m)
.from(m)
.where(m.isAdult())
.fetch();
members.forEach(member -> {
System.out.println("Member name: " + member.getName() +
", age: " + member.getAge());
});
원래 같았으면 where 절에 m.age.gt(19) 와 같이 Predicate 를 인자로 넘겨야 했겠지만 isAdult() 라는 메소드로 표현함으로써 더 간결하고 의도가 명확한 메소드 이름으로 조건절을 작성할 수 있게 되었다.
'Framework and Tool > JPA' 카테고리의 다른 글
JPA - 객체지향 쿼리 언어 - 네이티브 SQL (2) | 2021.08.27 |
---|---|
JPA - 객체지향 쿼리 언어 - QueryDSL 배치쿼리, 동적쿼리 (0) | 2021.08.24 |
JPA - 객체지향 쿼리 언어 - QueryDSL 프로젝션 (0) | 2021.08.21 |
JPA - 객체지향 쿼리 언어 - QueryDSL Join, 서브쿼리 (0) | 2021.08.18 |
JPA - 객체지향 쿼리 언어 - QueryDSL 검색조건, 페이징, 그룹 (0) | 2021.08.16 |
댓글