在 ibatis 上映射枚举
mapping enum on ibatis
我有一个类似这样的枚举
public Enum MyEnum {
NEW("NEW"),
OLD("OLD"),
IN_PROCESS("IN PROCESS");
}
ibatis 上的映射适用于 NEW 和 OLD,但在 [=遇到 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()
因为它被标记为最终的所以你的选择是:
简单的方法是使用 IN_PROCESS 而不是 IN PROCESS。我更喜欢这个,更简单快捷。
第二个选项是为此枚举创建 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)
}
}
我有一个类似这样的枚举
public Enum MyEnum {
NEW("NEW"),
OLD("OLD"),
IN_PROCESS("IN PROCESS");
}
ibatis 上的映射适用于 NEW 和 OLD,但在 [=遇到 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()
因为它被标记为最终的所以你的选择是:
简单的方法是使用 IN_PROCESS 而不是 IN PROCESS。我更喜欢这个,更简单快捷。
第二个选项是为此枚举创建 TypeHanlder 并检查
[=29= 进行搜索]parameter
是否正在处理并使用 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)
}
}