Возвращение Йода DateTime вне класса
У меня возникли проблемы с выяснением того, как вернуть один DateTime из SQL-запроса, используя mybatis:
Соответствующая часть моего интерфейса:
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>
Моя проблема, кажется, со свойством = время, потому что я получаю эту ошибку:
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>
1 ответ
Насколько я знаю, вам нужно использовать обработчик типа, как вы делаете, но со свойством, установленным в соответствии с приведенным ниже примером.
например
<idArg column="dt" property="dt" javaType="org.joda.time.DateTime" typeHandler="org.joda.time.mybatis.handlers.DateTimeTypeHandler"/>
Я использовал этот проект GitHub в качестве руководства о том, как использовать TypeResolver