我使用MySQL数据库与Hibernate,有某些Enum字段允许NULL或空值。在进行查询并且Hibernate尝试将空值映射到定义的Enum之前,一切都很好。我无法在Enum中定义一个可以工作的值,因为Enum允许空格。
Enum类:private enum ObjType {
itemA,
itemB,
NULL
}
它接受NULL作为成员,但这没有帮助。我是EE Java的新手,非常感谢您的帮助。由于
您可以添加一个unknown
或default
或invalid
值到您的enum,如果它是null
或empty space
,将被映射
package com.test;
import java.util.HashMap;
public class Brand{
private static HashMap<String,BrandName> map = new HashMap<String,BrandName>();
public enum BrandName {
HERO("hero"),HONDA("honda"),UNKNOWN("default");
private String value = null;
private BrandName(String value){
this.value = value;
addToMap();
}
private void addToMap(){
map.put(this.value, this);
}
@Override
public String toString(){
return this.value;
}
public static BrandName fromValue(String value){
return map.get(value) != null ? map.get(value) : map.get("default");
}
}
}
使用fromValue
方法可以从value中获取enum对象。使用toString
方法可以获得枚举对象的值。map
将包含value到enum对象的映射。如果像null
或empty space
这样的值在map中不存在,map将返回null,在这种情况下,fromValue
方法将返回UNKNOWN
枚举对象。
System.out.println(Brand.BrandName.HERO.toString());
System.out.println(Brand.BrandName.fromValue("").toString());
System.out.println(Brand.BrandName.fromValue(null).toString());
System.out.println(Brand.BrandName.fromValue("honda").toString());
您可以使用默认值将列设置为实体中的NULL枚举字段。
@Enumerated(EnumType.STRING)
@Column(name="obj_type", columnDefinition="char(20) default 'NULL'")
ObjType objType;
和更新现有行。
update table set obj_type='NULL' where obj_type IS NULL
顺便说一句,我将调用枚举字段UNKNOWN,因为它可能与DB空值混淆。