在 ibatis 上映射枚举

mapping enum on ibatis

我有一个类似这样的枚举

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

ibatis 上的映射适用于 NEWOLD,但在 [=遇到 25=] 因为我的 IN_PROCESS 在数据库中的值是 IN PROCESS,并且错误表示 ibatis 试图找到具有该值的枚举,有人可以提出解决方案吗?

MyBatis 使用 EnumTypeHandler 来与枚举进行映射。在此枚举类型处理程序中,它使用枚举的 name() 方法,其中 returns 变量名称的字符串值。 例如 NEW -> "NEW" 和 IN_PROCESS -> "IN_PROCESS"。

否则,要获取它使用 Enum.valueOf(type, s); 的值,它通过与变量名称对应的字符串值获取 Enum 的值 ("NEW" -> MyEnum.NEW, "IN_PROCESS" -> MyEnum.IN_PROCESS) 并且在内部使用方法 name().

你不能覆盖 name() 因为它被标记为最终的所以你的选择是:

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

  2. 第二个选项是为此枚举创建 TypeHanlder 并检查 parameter 是否正在处理并使用 IN_PROCESS.

    [=29= 进行搜索]

我有同样的问题,我最终在我的 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)
    }
}