Spring 在ResultHandler内部调用insert会导致null指针异常

Spring 在ResultHandler内部调用insert会导致null指针异常,spring,mybatis,ibatis,Spring,Mybatis,Ibatis,我正在实现一个过滤器,在某些条件下,它必须在某些表中进行插入。 首先,我像这样调用我的结果处理程序: DateTime midnight = ...//date MyHandler handler = new MyHandler(); MyFilter filterChain = new MyFilter(); handler.addFilter(filterChain); //query is a select based on the date pas

我正在实现一个过滤器,在某些条件下,它必须在某些表中进行插入。 首先,我像这样调用我的结果处理程序:

    DateTime midnight = ...//date
    MyHandler handler = new MyHandler();
    MyFilter filterChain = new MyFilter();
    handler.addFilter(filterChain);
    //query is a select based on the date passed as parameter
    session.select("com.MyRequestMapper.getAllRequests", midnight.toDateTime(), handler);
这是我的处理程序:

@Component
public class MyHandler implements ResultHandler{
      @Autowired
      private AnotherTableMapper mapper;
      ...

      public void handleResult(ResultContext ctx){
         MyRequest req = (MyRequest)ctx.getResultObject();
         if(this.filter.apply(req))
              mapper.insertRequest(req);
      }
本插页提供了以下信息:

### Error querying database.  Cause: java.lang.NullPointerException
### The error may exist in  com/MyRequestMapper.java (best guess)
### The error may involve com.MyRequestMapper.getAllRequests
### The error occurred while handling results
### SQL: SELECT* FROM MY_REQUESTS where request_date = ?
### Cause: java.lang.NullPointerException
…但我执行的是插入而不是选择!最重要的是,并不是所有的_请求表都进行了插入!
这是为什么?

看起来错误是由带有session.select的行引起的。。可能你的更新工作正常。空指针可能是由于表和Java实体之间的映射不起作用——我猜您的数据库中有空值。不可能是:ALL_请求表上有一个不允许req_date列为空的约束。此外,我还添加了一些调试断点,我可以确认req_date不为null,并且在insert()函数上发生异常。导致NullpointException的可能是映射到java实体的任何数据库字段,而不仅仅是req_date,在Insert处理中可能确实会发生错误,因为在处理程序获取select结果时调用Insert。然后出于调试目的,您应该隔离调用:
List results=session.selectList[…];对于(MyRequest-req:results){mapper.insertRequest(req);
,将更容易识别NPE与什么相关。