반응형
Query Dsl로 작성하다가 보면 DB에서 사용하던 DB Function을 사용해야 할때가 있다.
예를 들어 아래와 같이 order by 해야 하는데 "2021-01-01 10:10:10" 인 컬럼값을
"2021-01-01 10" 와 같이 "%Y-%m-%d %H:%i:%s" 인 형태에서 "%Y-%m-%d %H"
로만 변형으로 해서 날짜와 시간으로 정렬을 하고자 할때는 QueryDsl 기본 문법으로 적용이 안된다.
이럴때 아래와 같이 사용하면 해결이 된다.
public List<Contents> findContentsFunctionTest(){
QContents contents = QContents.contents;
List<Contents> contentsList = queryFactory.selectFrom(contents)
.orderBy(
Expressions.stringTemplate("DATE_FORMAT({0}, {1})",contents.startDisplayTime, "%Y-%m-%d %H:%i").desc()
)
.fetch();
return contentsList;
}
위 소스를 보면 OrderBy 부분에 Expressions 이 사용된것이 보인다. 짐작하다시피 Expressions templates를 이용해서 DB Function을 사용할수 있고 꼭 Order By가 아닌 where 이나 다른곳에서도 사용이 가능하다.
select
contents0_.content_id as content_1_1_,
contents0_.display_position_code as display_2_1_,
contents0_.start_display_time as start_di3_1_
from
contents contents0_
order by
date_format(contents0_.start_display_time, ?) desc
위와 같이 date_format fuction이 정상적으로 사용되는게 확인된다.
'Spring > JPA' 카테고리의 다른 글
7) QueryDsl InlineView(인라인뷰) 해결하기. (0) | 2021.09.02 |
---|---|
5) Spring Data JPA 5부 - QueryDSL Paging , Sort (0) | 2021.08.02 |
4) Spring Data JPA 4부 - QueryDSL Predicate 활용 (0) | 2021.07.30 |
3) Spring Data JPA 3부 - @Query , QueryDSL (0) | 2021.03.18 |
2) Spring Data JPA 2부 - @OneToMany ,@ManyToOne , Casecade (0) | 2021.03.12 |