我在线
面临例外int cdStatus = ((Integer)vecColumns.elementAt(1)).intValue();
00000050 CommerceSrvr E com.ibm.commerce.command.ECCommandTarget executeCommand CMN0420E:
The following command exception has occurred during processing: "java.lang.ClassCastException: java.math.BigDecimal incompatible with java.lang.Integer".
java.lang.ClassCastException: java.math.BigDecimal incompatible with java.lang.Integer
at com.ibm.commerce.promotion.facade.server.commands.ValidateUniquePromotionCodesTaskCmdImpl.verifyPromotionCodes(ValidateUniquePromotionCodesTaskCmdImpl.java:137)
at com.ibm.commerce.promotion.facade.server.commands.ValidateUniquePromotionCodesTaskCmdImpl.performExecute(ValidateUniquePromotionCodesTaskCmdImpl.java:84)
这里veColumn是一个Vector,elementAt(1)是数据库中的coloumn,数据库端是smallInt类型。我不确定这张照片中有多小的十进制数?
答案 0 :(得分:2)
您从数组中提取的元素的类型为BigDecimal。您不能将BigDecimal强制转换为整数。使用强制转换为BigDecimal将转换替换为Integer,它应该可以工作。
答案 1 :(得分:1)
异常行为的原因是,即使PX_CDUSAGE将列定义为SMALLINT,它确实映射为Oracle数据库中的NUMBER(38),而后者又表示为BigDecimal Java对象,解释了为什么vecColumn.elementAt(1)
包含BigDecimal
而不是预期的Integer
。
可在此处找到更多详细信息:Error description
现在,作为一个解决方案,一个简单的转换为BigDecimal而不是Integer以避免ClassCastException,正如mpkorstanje正确指出的那样,但由于这看起来像代码你无法改变,我建议检查链接中的指示修复禁用支票。如果不更改列类型,它可能是唯一可行的解决方案。