Querydsl에서 공통컬럼 조회

Created:

@MappedSuperclass 를 통해 공통컬럼을 상속받은 테이블을 조회해보기

테스트 엔티티 목록

  • Base Entity
@Getter
@Setter
@MappedSuperclass
public class BaseCity {
    protected String name;
}
  • 상속받은 Entity
@Getter
@Setter
@Entity
@Table(name = "cities")
public class City extends BaseCity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}
  • 상속받은 Entity2
@Getter
@Setter
@Entity
@Table(name = "cities2")
public class City2 extends BaseCity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

조회

  • repository 메소드 호출
BooleanBuilder builder = new BooleanBuilder();
// 공통컬럼인 `name`을 공통으로 다루기위해 Expressions 사용
builder.and(Expressions.stringPath(QBaseCity.baseCity.name.getMetadata().getName()).containsIgnoreCase("test"));
return cityRepository.getContent(QCity.city, builder); // return cityRepository.getContent(QCity2.city2, builder);
  • repository 구현
// 제네릭으로 Entity 받아서 처리
public <T> List<T> getContent(EntityPathBase<T> entity, BooleanBuilder clause) {
    return queryFactory.selectFrom(entity)
            .where(clause)
            .fetch();
}

Comments