這是我的 JDBI 方法
@Override
@SqlQuery("SELECT * FROM " TABLE_NAME " WHERE " COLUMN_CAMPAIGN_ID " = :campaignId AND " COLUMN_STATUS
" = 0 AND " COLUMN_STAGE_ID " IS NULL AND " COLUMN_MODIFICATION_DATE
" < NOW() - INTERVAL '<timeInterval>'")
List<Idea> getDraftIdeasBeforeTime(@Bind("campaignId") long campaignId,
@Define("timeInterval") String timeInterval);
在執行時,它因以下錯誤而中斷
ERROR [2021-10-22 10:06:00,041] com.addons.advanced.jobs.DraftIdeasJob: Exception received while trying to delete draft ideas : org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException: org.postgresql.util.PSQLException: ERROR: argument of AND must be type boolean, not type timestamp without time zone
Position: 127 [statement:"SELECT * FROM ideas WHERE campaign_id = :campaignId AND status = 0 AND stage_id IS NULL AND modification_date < NOW() - INTERVAL '<timeInterval>'", located:"SELECT * FROM ideas WHERE campaign_id = :campaignId AND status = 0 AND stage_id IS NULL AND modification_date ", rewritten:"/* IdeasDaoJdbi.getDraftIdeasBeforeTime */ SELECT * FROM ideas WHERE campaign_id = ? AND status = 0 AND stage_id IS NULL AND modification_date ", arguments:{ positional:{}, named:{campaignId:10}, finder:[]}]
如您所見,發布位置,它只考慮 up 直到... AND modification_date并忽略之后的。
為什么會這樣?
uj5u.com熱心網友回復:
您需要在查詢中轉義<(更改為\\<)符號,因為它與模板引擎使用的相同。
編輯:添加到更具體的答案,問題是
" < NOW() - INTERVAL '<timeInterval>'"
這需要
" \\< NOW() - INTERVAL '<timeInterval>'"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/331675.html
標籤:爪哇 PostgreSQL 数据库 下拉向导 jdbi
