[英]mapping enum on ibatis
我有一个像这样的枚举
public Enum MyEnum {
NEW("NEW"),
OLD("OLD"),
IN_PROCESS("IN PROCESS");
}
ibatis上的映射适用于NEW和OLD ,但遇到IN_PROCESS时遇到错误,因为DB中我的IN_PROCESS的值是IN PROCESS ,并且错误表明ibatis试图找到具有该值的枚举,can有人建议解决方案?
MyBatis使用EnumTypeHandler与枚举进行映射。 在这个Enum类型处理程序中,它使用Enums的name()
方法,该方法返回变量名称的字符串值。 例如NEW - >“NEW”和IN_PROCESS - >“IN_PROCESS”。
否则,要获取它使用的值Enum.valueOf(type, s);
它通过与变量名称对应的String值获取Enum的值(“NEW” - > MyEnum.NEW,“IN_PROCESS” - > MyEnum.IN_PROCESS),并在内部使用方法name()
。
你不能覆盖name()
因为标记为final,所以你的选项是:
简单的方法是使用IN_PROCESS而不是IN PROCESS。 我更喜欢这个,更容易,更快。
第二个选项是为此枚举创建TypeHanlder并检查parameter
是否为IN PROCESS并使用IN_PROCESS进行搜索。
我有同样的问题,我最终在我的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)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.