인프런 커뮤니티 질문&답변

Truestar님의 프로필 이미지
Truestar

작성한 질문수

실전! Querydsl

검색 조건 쿼리

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

해결된 질문

작성

·

628

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 입니다.

읽어주셔서 감사합니다.

답변 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님의 프로필 이미지
Truestar
질문자

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

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

1

Truestar님의 프로필 이미지
Truestar
질문자

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

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

Truestar님의 프로필 이미지
Truestar

작성한 질문수

질문하기