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