inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! Querydsl

검색 조건 쿼리

p6spy 로깅 시에 파라미터 값이 NULL 이 되는 이슈.

해결된 질문

741

Truestar

작성한 질문수 68

2

안녕하세요. 김영한 강사님^^
여러 Querydsl 조건연산  메서드 호출 예제 Test 도중
 다음과 같이 NULL 이 찍히는 현상을 발견했습니다.

Querydsl : member.age.notIn(20, 30, 40)

p6spy : m.age not in (? , ? , ?)
: m.age not in (30 , 40 , NULL);

저는 Querydsl 과 의존성 충돌이 생긴줄 알고, 
spring-boot 버전을 2.3.4 -> 2.2.10 으로 다운그레이드 를 해봤는데 똑같은 애러가 나더라구요.

그래서 logging.level.org.hibernate.type: trace 옵션을 켜놓고 보니

BasicBinder      : binding parameter [1] as [INTEGER] - [20]
BasicBinder : binding parameter [2] as [INTEGER] - [30]
BasicBinder : binding parameter [3] as [INTEGER] - [40]

이것 외 다른식에서도 다음처럼 NULL 이 찍힙니다.

Querydsl     : member.username.eq("memberA").not()
BasicBinder : binding parameter [1] as [VARCHAR] - [memberA]
p6spy : m.username<>?
: m.username<>NULL;

Querydsl : member.username.like("%%")
BasicBinder : binding parameter [1] as [VARCHAR] - [%%]
p6spy : m.username like ? escape '!'
: m.username like NULL escape '!';

결국 p6spy 이 파라미터 값을 제대로 처리를 못해주는 현상인것 같은데,
혹시 이부분에 대한 알려진 해결방법이 있습니까?
혹시 제가 놓친게 있나 싶어서 여쭤보아요.

쓰고있는 p6spy 버전은 p6spy-spring-boot-starter:1.6.2 입니다.

읽어주셔서 감사합니다.

java JPA

답변 4

4

김영한

ㅎㅎ 저건 검색해도 안나오더라구요 ㅋㅋ

JPA에서 코멘트를 추가로 출력하면 ?가 나오고, p6spy는 ?를 치환하니까 이렇게 된 것이라 가정하고, 코드를 여러번 돌려보면서 확인했습니다^^

4

김영한

안녕하세요. Truestar님^^

아마도 hibernate.use_sql_comments 옵션이 true로 설정되어 있을꺼에요^^

이 옵션을 넣으면 하이버네이트가 sql에 JPQL을 주석으로 추가해줍니다.

p6spy가 ?를 치완해야 하는데 이 추가된 JPQL 주석 때문에 앞 부분에서 치환이 끝나버리는 것이지요.

use_sql_comments 옵션을 제거해주시면 정상 동작합니다^^

use_sql_comments off

select * from member m where m.username = ?

select * from member m where m.username = 'hello'

use_sql_comments on

/* select m from member m where m.username = ? */ select * from member m where m.username = ?

/* select m from member m where m.username = 'hello' */ select * from member m where m.username = null

감사합니다.

1

Truestar

또 한번 배웁니다. 답변 감사해요..

이건  p6spy 개발자에게 한번 보내봐야겠어요 ㅎㅎ

1

Truestar

저는 뭔가 거대한걸 발견한듯했지만 그런것이었군요ㅎㅎ
말씀대로 한방에 해결이 되었습니다.ㅠ

혹시 외람되지만.. 이런 문제는 어떤식으로 구글링 해야 찾을수 있을까요?
검색 키워드 조합 내공이 너무 딸려 문의드립니다.ㅠㅠ

SpringBoot 4.X에서의 Querydsl 설정

0

81

2

querydsl 오픈소스에 대한 질문

0

69

1

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

0

108

1

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

0

316

2

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

1

68

1

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

0

159

1

querydsl sum() 메서드 없어요.

0

157

2

build 디렉터리 생성

0

135

2

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

0

113

2

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

0

90

1

오타 제보 드립니다.

0

70

2

벌크 연산과 flush, clear

0

76

1

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

0

87

1

QHello import하기 문제 발생

0

147

2

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

0

68

2

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

1

195

2

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

1

200

1

querydsl 설정 문제

0

222

2

quey dsl 설정부분

0

157

2

count 쿼리 관련 질문입니다!

0

75

1

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

0

89

1

답변부탁드리겠습니다.

0

89

2

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

0

64

1

중급문법 벌크연산에서

0

81

2