[英]How to execute join query in spring batch item reader
我已經創建了從數據庫中獲取數據並將它們寫入 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;
}
在我的映射器中,我應該有其他表中的其他列加入我該怎么做呢?
你在這里得到一個名為 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.