Hello,

I found the reason for my problem is the following method in class ResultMap, line 310:

  public Object[] getResults(StatementScope statementScope, ResultSet rs)
      throws SQLException {
...
    boolean foundData = false;
    Object[] columnValues = new Object[getResultMappings().length];
    for (int i = 0; i < getResultMappings().length; i++) {
      ResultMapping mapping = (ResultMapping) getResultMappings()[i];
      errorContext.setMoreInfo(mapping.getErrorString());
      if (mapping.getStatementName() != null) {
...
        foundData = foundData || columnValues[i] != null;
      } else if (mapping.getNestedResultMapName() == null) {
        columnValues[i] = getPrimitiveResultMappingValue(rs, mapping);
        if (columnValues[i] == null) {
          columnValues[i] = doNullMapping(columnValues[i], mapping);
        } else {
          foundData = true;
        }
      }
    // TODO: add a check for the case
    // mapping.getNestedResultMapName() != null
    }

    statementScope.setRowDataFound(foundData);

    return columnValues;
  }

The value of foundData remains false, if there are only mappings with nested result maps. This proceeding assumes that there is no data in this case. But this assumption seems to be wrong. For the nested result maps one have to check, if ResultSet.wasNull() returns true, I think.

else {
    // check the return value of ResultSet.wasNull()
    if (ResultSet.wasNull() has returned false) {
        foundDate = true;
    }
}

Ingmar

Reply via email to