Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用isEqual时,iBatis无法从映射中读取属性_Ibatis - Fatal编程技术网

使用isEqual时,iBatis无法从映射中读取属性

使用isEqual时,iBatis无法从映射中读取属性,ibatis,Ibatis,当我尝试使用isEqual从Java映射中读取属性时,iBatis出现了一个非常奇怪的问题,但其他iBatis操作符却没有。例如,当使用isNotNull和iterate时,它能够很好地读取映射属性。xml: <isNotNull property="filterCriteria.account"> AND id <isEqual property="filterCriteria.account.meetsCriteria

当我尝试使用
isEqual
从Java映射中读取属性时,iBatis出现了一个非常奇怪的问题,但其他iBatis操作符却没有。例如,当使用
isNotNull
iterate
时,它能够很好地读取映射属性。xml:

    <isNotNull property="filterCriteria.account">
        AND
        id
        <isEqual property="filterCriteria.account.meetsCriteria" compareValue="false">
            NOT
        </isEqual>
        IN
        (SELECT DISTINCT id
        FROM account
        WHERE some other criteria....
        )
    </isNotNull>
例外情况是:

Cause: com.ibatis.common.beans.ProbeException: There is no READABLE property named 'account' in class 'java.util.Map'; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
getSQLString()
方法是我不成熟的变通方法,字符串在查询中被转义并抛出语法错误


当我删除
块时,查询将执行find,这表明它在检查
“account”
键是否为null时能够读取该键。正如我上面提到的,我们还可以在
标记中使用映射键而不会出现问题。似乎只有
标记会引起问题。有人对此有经验或知道会发生什么吗?

注意:使用
isNotNull
isEqual
iterate
iBatis,它们在Mybatis中不再存在,因此对Mybatis的引用会让人困惑

对于您的问题,如果将Map替换为类(属性将在编译时已知),它的行为如何

或者尝试使用

解决方法可以使用正确的语法:
$
而不是
$filterCriteria.account.SQLString$
而不是
#filterCriteria.account.SQLString
,然后将值连接起来而不是作为参数绑定

public class SearchProfileCriteria {

boolean meetsCriteria;

public String getCriteriaAsString() {
    return StringUtils.getStringValueFromBoolean(meetsCriteria);
}

public boolean isMeetsCriteria() {
    return meetsCriteria;
}

public void setMeetsCriteria(boolean meetsCriteria) {
    this.meetsCriteria = meetsCriteria;
}

public String getSQLString(){
    return meetsCriteria ? "" : "NOT";
}
}
Cause: com.ibatis.common.beans.ProbeException: There is no READABLE property named 'account' in class 'java.util.Map'; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException: