mybatis を使用して SQL クエリから単一の DateTime を返す方法を理解するのに問題があります。
私のインターフェースの関連部分:
DateTime getMinActual(@Param("IDs") List<Integer> IDs);
私のマッパーxmlの関連部分:
<resultMap id="dtt" type="org.joda.time.DateTime">
<result column="dt" property="time" javaType="org.joda.time.DateTime" jdbcType="TIMESTAMP" typeHandler="org.joda.time.mybatis.handlers.DateTimeTypeHandler" />
</resultMap>
<select id="getMinActual" resultMap="dtt">
select min(cast(case when [quarter]=1 then '1/' when [quarter]=2 then '4/' when [quarter]=3 then '7/' else '10/' end + '1/' + cast([year] as varchar) as datetime)) as dt
from
Ops where id in
<foreach item="IDs" index="index" collection="IDs"
open="(" separator="," close=")">
#{IDs}
</foreach>
</select>
このエラーが発生するため、私の問題はプロパティ = "time" にあるようです:
org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'time' in 'class org.joda.time.DateTime'
DateTime、datetime、dateTime、org.joda.time.DateTime などのさまざまなプロパティ名をすべて試しましたが、すべて同じエラーが発生しました。
何か案は?
指摘されたように更新 JodaTime は不変ですが、これは機能するはずです:
<resultMap id="dtt" type="org.joda.time.DateTime">
<constructor>
<idArg column="dt" javaType="org.joda.time.DateTime" typeHandler="org.joda.time.mybatis.handlers.DateTimeTypeHandler" />
</constructor>
</resultMap>