我已經創建了從資料庫中獲取資料并將它們寫入 csv 檔案的程式,但是當我的查詢正常并且當我在 sql 控制臺中運行它時,我無法執行 sql join query inline jdbcCursorItemReader.setSql()我在春季批處理中運行此查詢,但未找到列“id”。錯誤
我的查詢是:
SELECT iad.order_id, tb.mch_order_id, iad.transaction_time, iad.pay_amount, iad.fee_rate, iad.net_amount
FROM ibg_account_detail iad INNER JOIN ibg_account ia ON iad.ibg_account_id = ia.id
INNER JOIN ibg_settlement is2 ON ia.ibg_settlement_id = is2.id
INNER JOIN tb_bill tb ON iad.order_id = tb.order_id
WHERE is2.created_date >= '2022-05-20 00:00:00' AND is2.created_date <= '2022-05-20 23:59:59'
AND ia.account = '15088888888';
我的 ItemReader 功能是:
public JdbcCursorItemReader<IbgAccountDetailEntity> jdbcCursorItemReader(){
JdbcCursorItemReader<IbgAccountDetailEntity> jdbcCursorItemReader = new JdbcCursorItemReader<>();
jdbcCursorItemReader.setDataSource(dataSource);
jdbcCursorItemReader.setSql(GetEntityFromQuery.SELECT_FILTER_QUERY);
jdbcCursorItemReader.setRowMapper(mapper);
return jdbcCursorItemReader;
}
這是我的映射器:
public IbgAccountDetailEntity mapRow(ResultSet resultSet, int rowNum) throws SQLException {
IbgAccountDetailEntity ibgAccountDetail = new IbgAccountDetailEntity();
ibgAccountDetail.setId(resultSet.getLong("id"));
ibgAccountDetail.setOrderId(resultSet.getString("order_id"));
ibgAccountDetail.setTransactionTime(resultSet.getTimestamp("transaction_time"));
ibgAccountDetail.setPayAmount(resultSet.getBigDecimal("pay_amount"));
ibgAccountDetail.setFeeRate(resultSet.getBigDecimal("fee_rate"));
ibgAccountDetail.setNetAmount(resultSet.getBigDecimal("net_amount"));
return ibgAccountDetail;
}
在我的映射器中,我應該有其他表中的其他列加入我該怎么做呢?
uj5u.com熱心網友回復:
你在這里得到一個名為 id 的列:
ibgAccountDetail.setId(resultSet.getLong("id"));
但是您的 SQL 查詢不會回傳具有此名稱的列:
SELECT iad.order_id, tb.mch_order_id, iad.transaction_time, iad.pay_amount, iad.fee_rate, iad.net_amount
結果集中沒有名為 id 的列嘗試將查詢更改為:
SELECT ia.id, iad.order_id, tb.mch_order_id, iad.transaction_time, iad.pay_amount, iad.fee_rate, iad.net_amount
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/494637.html
上一篇:帶有分離標準謂詞的Grails3
