我有一个像这样的枚举
public Enum MyEnum {
NEW("NEW"),
OLD("OLD"),
IN_PROCESS("IN PROCESS");
}
ibatis上的映射适用于 NEW 和 OLD ,但遇到自我的值以来 IN_PROCESS 时遇到错误数据库中的 IN_PROCESS 是 IN PROCESS ,错误表明ibatis尝试查找具有该值的枚举,有人可以建议解决方案吗?
答案 0 :(得分:3)
MyBatis使用EnumTypeHandler与枚举进行映射。在这个枚举类型处理程序中,它使用Enums的name()
方法,它返回变量名称的字符串值。
例如NEW - > " NEW"和IN_PROCESS - > " IN_PROCESS&#34 ;.
否则,要获取它使用的值Enum.valueOf(type, s);
,它通过与变量名对应的String值获取Enum的值(" NEW" - > MyEnum.NEW,& #34; IN_PROCESS" - > MyEnum.IN_PROCESS)并在内部使用方法name()
。
您无法覆盖name()
,因为已标记为最终,因此您可以选择:
简单的方法是使用IN_PROCESS而不是IN PROCESS。我更喜欢这个,更容易,更快。
第二个选项是为此枚举创建TypeHanlder并检查parameter
是否处于IN PROCESS并使用IN_PROCESS进行搜索。
答案 1 :(得分:0)
我遇到了同样的问题,最后我在POJO上编写了一个自定义setter来转换字符串值。
public Enum MyEnum {
NEW("NEW"),
OLD("OLD"),
IN_PROCESS("IN PROCESS");
public static MyEnum fromValue(String v){
.... find the enum based on value
}
}
public class POJO {
private MyEnum myEnum;
public void setMyEnum(String strV){
myEnum=MyEnum.fromValue(strV)
}
}