OrmLite在刷新时不抛出异常而没有结果

时间:2012-08-17 07:10:49

标签: javadoc dao ormlite sqlexception

方法中Dao refresh()的Javadoc状态:

  

抛出:   SQLException - 关于任何SQL问题或者如果在表中找不到数据项,或者如果找到的数据超过1项且数据为id。

但是 com.j256.ormlite.stmt.mapped.MappedRefresh 这个类有另一个Javadoc定义,并返回一个结果代码,一直备份到刷新和用户。

/**
 * Execute our refresh query statement and then update all of the fields in data with the fields from the result.
 * 
 * @return 1 if we found the object in the table by id or 0 if not.
 */
public int executeRefresh(DatabaseConnection databaseConnection, T data, ObjectCache objectCache)
        throws SQLException {
    @SuppressWarnings("unchecked")
    ID id = (ID) idField.extractJavaFieldValue(data);
    // we don't care about the cache here
    T result = super.execute(databaseConnection, id, null);
    if (result == null) {
        return 0;
    }
    // copy each field from the result into the passed in object
    for (FieldType fieldType : resultsFieldTypes) {
        if (fieldType != idField) {
            fieldType.assignField(data, fieldType.extractJavaFieldValue(result), false, objectCache);
        }
    }
    return 1;
}

这是一个错误还是只是Dao.refresh的Javadoc错误?

我在看OrmLite 4.41。

1 个答案:

答案 0 :(得分:0)

内部方法通常具有不完美的Javadoc,因为它仅适用于开发人员。此外,我倾向于不记录每个抛出的异常。

在这种情况下,MappedRefresh.executeRefresh(...)方法文档看起来很不错,除非它没有记录异常。如果您查看调用super.execute(...)的{​​{1}}行,您会看到它有以下测试/抛出:

MappedQueryForId.execute(...)

} else if (result == DatabaseConnection.MORE_THAN_ONE) { logger.error("{} using '{}' and {} args, got >1 results", label, statement, args.length); logArgs(args); throw new SQLException(label + " got more than 1 result: " + statement); } 和其他方法也可以针对各种数据或数据库问题抛出fieldType.assignField(...)

所以SQLException javadoc是正确的。 Dao.refresh(...) javadoc也是正确的,但缺少有关异常的详细信息。