p6spy 로깅 시에 파라미터 값이 NULL 이 되는 이슈.
안녕하세요. 김영한 강사님^^
여러 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 입니다.
읽어주셔서 감사합니다.
답변 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
저는 뭔가 거대한걸 발견한듯했지만 그런것이었군요ㅎㅎ
말씀대로 한방에 해결이 되었습니다.ㅠ
혹시 외람되지만.. 이런 문제는 어떤식으로 구글링 해야 찾을수 있을까요?
검색 키워드 조합 내공이 너무 딸려 문의드립니다.ㅠㅠ
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





