在ibatis上映射枚举

时间:2016-10-12 05:38:07

标签: java enums mapping ibatis

我有一个像这样的枚举

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

ibatis上的映射适用于 NEW OLD ,但遇到自我的值以来 IN_PROCESS 时遇到错误数据库中的 IN_PROCESS IN PROCESS ,错误表明ibatis尝试查找具有该值的枚举,有人可以建议解决方案吗?

2 个答案:

答案 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(),因为已标记为最终,因此您可以选择:

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

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