我在Spring Batch项目中用于JDBCPagingItemReader的查询是:
SELECT
account_login_log_id log_id,
created_at reference_time
FROM account_login_log
WHERE account_login_log_id > 1000
ORDER BY account_login_log_id
然后,RowMapper捕获从阅读器中获取的项目,并创建一个名为say SomeGeneralLog的对象。
SomeGeneralLog log = new SomeGeneralLog();
log.setLogId(rs.getInt("log_id");
log.setReferenceTime(rs.getTimestamp("reference_time");
然后,像某些批处理过程一样,将此日志返回给编写器。
这就是重点。程序抛出SQLException!
java.sql.SQLException:找不到列“ account_login_log_id”。
什么?我什至没有在RowMapper代码中找到“ account_login_log_id”列。
实际上,我可以通过将ORDER BY子句中的列名替换为'log_id'使其运行。但为什么?是什么原因请尽可能多地记笔记。 (我怀疑按查询中的关键字进行查询处理的顺序。* ref:https://stackoverflow.com/a/31808872/3648833)
谢谢。
最佳答案
SELECT account_login_log_id log_id
您为该列指定了别名,因此现在有了一个新名称,并且必须使用该新名称。
您的实际里程可能在RDBMS之间有所不同。