首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate、MySQL、枚举和NULL

问Hibernate、MySQL、枚举和NULL
EN

Stack Overflow用户
提问于 2011-12-10 14:07:28
回答 2查看 8.8K关注 0票数 8

我正在使用带有Hibernate的MySQL数据库,有一些枚举字段允许空值或空值。在发出查询并且Hibernate尝试将空值映射到定义的Enum之前,一切都是正常的。我无法在Enum中定义一个可以工作的值,因为Enum允许使用空格。

枚举类:

代码语言:javascript
复制
private enum ObjType {
    itemA,
    itemB,
    NULL
}

它接受NULL作为成员,但这无济于事。我是EE Java的新手,非常感谢任何人的帮助。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-10 14:46:28

您可以将unknown、default或invalid值添加到枚举中,如果值为null或empty space,则将映射这些值

代码语言:javascript
复制
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枚举对象。

代码语言:javascript
复制
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());
票数 4
EN

Stack Overflow用户

发布于 2011-12-10 14:20:06

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

代码语言:javascript
复制
@Enumerated(EnumType.STRING)
@Column(name="obj_type", columnDefinition="char(20) default 'NULL'")
ObjType objType;

并更新现有行。

代码语言:javascript
复制
update table set obj_type='NULL' where obj_type IS NULL

顺便说一句,我会称枚举字段为未知,因为它可能会与数据库空值混淆。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8454798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档