2015-11-26 29 views
0

我有一個ENUMMyBatis的 - 由那裏枚舉爲序

private OrderStatus status; 

和SQL

<select id="getOrder" parameterType="map" resultMap="OrderMap"> 
SELECT * FROM Order WHERE 
status = #{status, typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler} 
</select> 

和服務

@Override 
public Order getOrder(OrderStatus status) { 
    return this.orderMapper.getOrder(status); 
} 

在插入或更新SQL,工程類選擇數據很好,但在選擇發生錯誤

引發異常[嵌套異常爲org.apache.ibatis.type.TypeException:失敗,調用處理程序類org.apache.ibatis.type.EnumOrdinalTypeHandler的構造函數],其根本原因爲 java.lang.IllegalArgumentException:對象不表示枚舉類型。

我可以使用status.ordinal()將參數傳遞給SQL,但它沒有任何意義。

任何提示讚賞

+0

我有同樣的問題,因爲你,我debuged,發現這個:MyBatis的實例EnumOrdinalTypeHandler與構造函數org.apache.ibatis.type.EnumOrdinalTypeHandler#EnumOrdinalTypeHandler(類類型)。而參數「type」是java.lang.Object,這是不正確的。在你的情況下,參數「type」應該是OrderStatus.class而我發現了一個臨時解決方案:將「where status = ****」改爲「在(****)中的狀態」。這個對我有用!我認爲這是一個mybatis的錯誤。我太忙,無法報告。 (我必須工作到每天22:00,T_T)請您向mybatis團隊報告嗎? – Aray

回答

0

要註冊的EnumOrdinalTypeHandler在MyBatis的-config.xml中的枚舉類

<typeHandlers> 
     <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.yourpackage.OrderStatus "/> 
</typeHandlers>