0

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>
4

1 に答える 1

0

私が知る限り、あなたが行っているように型ハンドラーを使用する必要がありますが、以下の例のようにプロパティを設定します。

例えば

<idArg column="dt" property="dt" javaType="org.joda.time.DateTime" typeHandler="org.joda.time.mybatis.handlers.DateTimeTypeHandler"/>

TypeResolverの使用方法に関するガイドとして、この github プロジェクトを使用しました

于 2015-08-30T05:46:32.920 に答える