我在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之间有所不同。

08-06 10:23