Ibatis Query的参数化列第一次工作,第二次调用失败

时间:2014-01-17 19:31:09

标签: sql ibatis

我遇到的问题与我在此处发现的问题类似(或完全相同): How to map query for iBATIS with parameterized column in select clause? 但那里给出的答案似乎对我不起作用 我有以下内容:

<typeAlias alias="resultado" type="java.lang.String"/>
<typeAlias alias="parametro" type="java.util.Map"/>

<select id="getValorVariable" resultClass="resultado" parameterClass="parametro">
    SELECT $campo$ FROM $tabla$
    WHERE $campoClave$ = #valorClave#
</select>

第一次执行选择时,它可以正常工作。 $ campo $的值为'CIF'。第二次运行时,它应该具有值'FECHA'但它保持'CIF'。在调用select的函数中,我检查map及其值,并且它具有正确的值。

有什么想法吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您遇到此问题,因为除了参数值之外,iBatis预编译整个查询。这些是在查询运行时动态添加的。因此,第一次运行查询时,它会使用SELECT语句中的列名进行预编译。

添加

remapResults="true"

到您的<select>代码。

它应该是这样的:

<select id="getValorVariable" resultClass="resultado" parameterClass="parametro" remapResults="true">

此外,在<sqlMapConfig>中将此添加到<settings>标记:

statementCachingEnabled="false"