반응형
jOOQ가 DSL.condition()의 값을 바인딩하지 않습니다.
jOOQ를 사용하는 코드는 다음과 같습니다.
dslContext.select(CONNECTOR.asterisk())
.from(CONNECTOR)
.where(DSL.and(
CONNECTOR.STATUS.notEqual(ConnectorStatus.DELETED.name()),
DSL.condition("JSON_CONTAINS(vendor_data, '\"?\"', '$.id')", id)
))
.fetchInto(Connector.class);
문제는 이 일반 SQL 조건에 있습니다. 문서에서 바인딩을 전달할 수 있다고 하지만 어떤 이유로 '?'가 결과 SQL에 채워지지 않습니다.
로그에서 얻은 결과 SQL:
select `connector`.* from `connector` where (`connector`.`status` <> 'DELETED' and (JSON_CONTAINS(vendor_data, '"?"', '$.id')))
제가 무엇을 빠뜨리고 있나요?그것을 제대로 하는 방법은 무엇입니까?
jOOQ 버전: 3.12.1
일반 SQL 템플릿 처리에는 일반 SQL 템플릿에 대한 매뉴얼 섹션에 설명된 대로 문자열 리터럴 및 주석 수정을 방지하는 작은 파서가 포함됩니다.문자열 리터럴은 JDBC에서도 서버 구현에서도 바인딩 매개 변수를 포함할 수 없기 때문에 이 기능이 필요합니다.
넌 두가지 옵션이 있다 :
- 사용
JSON
대신 바인딩 값(예:JSON.json("\"" + id + "\"")
(JSON을 제대로 탈출했는지 확인합니다. - 서버의 JSON에 바인딩 값을 캐스팅합니다.
JSON_QUOTE(CAST(? AS VARCHAR))
아직 jOOQ 3.12를 사용하고 계신 것 같습니다.이후 버전의 jOOQ에서는 수많은 JSON 지원을 구현했으므로 업그레이드하는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/75889763/jooq-not-binding-values-in-dsl-condition
반응형
'programing' 카테고리의 다른 글
php 스프레드시트 라이브러리를 사용하여 배열에서 시트로 데이터 쓰기 (0) | 2023.06.08 |
---|---|
AMD 프로세서를 사용하여 AVD를 시작하는 중 오류 발생 (0) | 2023.06.08 |
Gradle을 사용하여 릴리스 서명된 pk 파일을 만드는 방법은 무엇입니까? (0) | 2023.06.03 |
mongo의 그룹 집계 후 _id 필드의 이름을 변경할 수 있습니까? (0) | 2023.06.03 |
RSpec과 시간 비교 문제 (0) | 2023.06.03 |