繁体   English   中英

在ibatis上映射枚举

[英]mapping enum on ibatis

我有一个像这样的枚举

public Enum MyEnum { 
  NEW("NEW"),
  OLD("OLD"),
  IN_PROCESS("IN PROCESS");
}

ibatis上的映射适用于NEWOLD ,但遇到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,所以你的选项是:

  1. 简单的方法是使用IN_PROCESS而不是IN PROCESS。 我更喜欢这个,更容易,更快。

  2. 第二个选项是为此枚举创建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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM