我正在使用带有Hibernate的MySQL数据库,有一些枚举字段允许空值或空值。在发出查询并且Hibernate尝试将空值映射到定义的Enum之前,一切都是正常的。我无法在Enum中定义一个可以工作的值,因为Enum允许使用空格。
枚举类:
private enum ObjType {
itemA,
itemB,
NULL
}它接受NULL作为成员,但这无济于事。我是EE Java的新手,非常感谢任何人的帮助。谢谢
发布于 2011-12-10 14:46:28
您可以将unknown、default或invalid值添加到枚举中,如果值为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中获取枚举对象。使用toString方法可以获取枚举对象的值。map将包含值到枚举对象的映射。如果像null或empty space这样的值在映射中不存在,映射将返回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());发布于 2011-12-10 14:20:06
可以使用默认值将该列设置为实体中的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顺便说一句,我会称枚举字段为未知,因为它可能会与数据库空值混淆。
https://stackoverflow.com/questions/8454798
复制相似问题