Java Hibernate、MySQL、Enum和NULL

Java Hibernate、MySQL、Enum和NULL,java,mysql,hibernate,enums,null,Java,Mysql,Hibernate,Enums,Null,我将MySQL数据库与Hibernate一起使用,并且存在允许空值或空值的某些枚举字段。在进行查询并Hibernate尝试映射定义的枚举上的空值之前,一切都很好。我无法在Enum中定义一个有效的值,因为Enum允许使用空格 枚举类: private enum ObjType { itemA, itemB, NULL } 它接受NULL作为成员,但这没有帮助。我对EE Java还不熟悉,如果有任何帮助,我将不胜感激。 谢谢您可以使用默认值将列设置为实体中的空枚举字段 @E

我将MySQL数据库与Hibernate一起使用,并且存在允许空值或空值的某些枚举字段。在进行查询并Hibernate尝试映射定义的枚举上的空值之前,一切都很好。我无法在Enum中定义一个有效的值,因为Enum允许使用空格

枚举类:

private enum ObjType {
    itemA,
    itemB,
    NULL
}
它接受NULL作为成员,但这没有帮助。我对EE Java还不熟悉,如果有任何帮助,我将不胜感激。
谢谢

您可以使用默认值将列设置为实体中的空枚举字段

@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

顺便说一句,我会调用enum字段UNKNOWN,因为它可能与DB NULL值混淆。

您可以向您的enum添加
UNKNOWN
default
invalid
值,如果它是
NULL
空白

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");
     }
}
}

它会工作,但我正在寻找一个非侵入性的解决方案,用于我不想修改原始数据的情况。添加了代码。。这是使用电动车组的正确和灵活的方式。
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());