inflearn logo
강의

Course

Instructor

Practice! Querydsl

PostgreSQL기반에서 LocalDateTime 비교문을 테스트시 제대로 동작을 안합니다.

1101

catsbi

16 asked

0

안녕하세요!

강의를 통해 배운 지식을 통해 영상및 텍스트 채팅 프로그램을 만들고 있습니다. 

여기서 안읽은 메세지를 구하기위해서 내가 마지막으로 해당 방에서 메세지를 읽은 시간을 저장하고 있고, 

그 시간보다 큰 시간대의 메세지를 조회해오는 쿼리입니다. 

첫번째 이미지에서 보시는 것처럼 message 에서 updateAt이 마지막 메세지를 읽은 시각(lastReadAt)보다 큰 메세지를 조회해오는 쿼리인데, 실제 실행쿼리문을 보면 아래 두번째 사진처럼 나옵니다. 

근데 이렇게 쿼리를 하게 될 경우 비교조건문이 제대로 동작을 하지 않습니다. 

저기서 '2020-08-07T07:12:09.602+0900' 뒤나 앞에 `::timestamp`를 붙혀줘서 캐스팅을 해줘야 제대로된 결과가

나옵니다.

이럴경우 queryDSL로 해결을 하려면 어떻게 해야할까요? 

java JPA

Answer 3

1

catsbi

감사합니다.  lastReadAt.truncatedTo(ChronoUnit.SECONDS) 로 하니 해결이 되었습니다.

이상한게 분단위로 차이를 둬서 미묘한 시간차이가 아니라 분 단위 시간차이였는데... 무튼 이제 동작도 잘되고 쿼리 출력된거

뽑아서 실행시켜도 잘 나옵니다. 매번 도움 너무!!! 많이받고갑니다. 감사합니다! 

0

yh

네 잘 해결되셔서 다행입니다^^!

0

yh

안녕하세요. 한솔님

이렇게 쿼리를 하게 될 경우 비교조건문이 제대로 동작을 하지 않습니다라고 하셨는데요. -> 이 부분이 정확히 어떤 점 때문에 제대로 동작을 하지 않을까요?

오류가 발생하는지요?

단순히 결과가 나오지 않는 것인가요?

아니면 시간에 미묘한 차이가 발생하서 그런 것인지요?

밀리초 이하 부분이 조금 안맞는지요?

만약 시간이 미묘하게 안맞는 문제라면 자바에서 LocalDateTime에 등록이나 조회시에 적절하게 절삭해서 처리해주시면 됩니다.

다음 코드를 참고해주세요^^

LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS);

추가로 Querydsl도 결국 JPQL로 번역이 되는데요. 그래서 ::timestamp를 붙이는 것은 JPQL 문법에 어긋나서 불가능합니다. 대신에 사용자 정의 함수를 만들어서 함수를 등록해서 처리하는 것은 가능합니다. 이 부분은 JPA 사용자 함수로 검색해보시면 원하는 결과를 찾으실 수 있을거에요^^

도움이 되셨길 바래요.

SpringBoot 4.X에서의 Querydsl 설정

0

64

2

querydsl 오픈소스에 대한 질문

0

65

1

예제에서의 카운트 쿼리에서 join문과 where문은 필요없지 않나요?

0

105

1

Querydsl 6.X버전에 대해서 어떻게 생각하시나요?

0

309

2

여러 테이블 조인하여 통계치를 구하고자 할 때 어떤 방법이 더 효율적일까요

1

67

1

fetchResults()는 더이상 권장되지 않는다는데 맞나요?

0

158

1

querydsl sum() 메서드 없어요.

0

156

2

build 디렉터리 생성

0

134

2

자바 ORM 표준 JPA 프로그래밍 - 기본편 듣고 바로 학습해도 괜찮을까요?

0

112

2

현재 Querydsl에서 from절 서브쿼리를 지원하나요?

0

87

1

오타 제보 드립니다.

0

69

2

벌크 연산과 flush, clear

0

75

1

Run As Intellij 로 변경시 Q타입 import 불가

0

84

1

QHello import하기 문제 발생

0

146

2

등록된 함수 보는법(H2Dialect) 질문

0

67

2

5.0부터 Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했다고 하는데 이에 맞는 강의

1

190

2

[환경설정 PDF 부트 3.0이후 설명 질문] build.gradle에 compileQuerydsl을 정의하지 않은 상태에서 Gradle->Tasks->other->compileQuerydsl을 클릭하라고 하는 이유가 무엇인가요??

1

195

1

querydsl 설정 문제

0

220

2

quey dsl 설정부분

0

155

2

count 쿼리 관련 질문입니다!

0

73

1

stringtemplate를 이용하여 where절 검색 방법 질문 드립니다.

0

89

1

답변부탁드리겠습니다.

0

88

2

(OrderSpecifier)관련 내용 어디있을가요

0

60

1

중급문법 벌크연산에서

0

77

2