Hibernate, MySQL, Enum и NULL

Я использую базу данных MySQL с Hibernate, и есть определенные поля Enum, которые допускают NULL или пустые значения. Все в порядке, пока не будет выполнен запрос, и Hibernate попытается отобразить пустое значение в определенном Enum. Я не могу определить значение в Enum, которое бы работало, потому что Enum разрешает пробелы.

Enum class:

private enum ObjType {
    itemA,
    itemB,
    NULL
}

Он принимает NULL в качестве члена, но это не помогает. Я новичок в EE Java, и был бы признателен за любую помощь. Благодаря

7 голосов | спросил Loke 10 SatEurope/Moscow2011-12-10T10:07:27+04:00Europe/Moscow12bEurope/MoscowSat, 10 Dec 2011 10:07:27 +0400 2011, 10:07:27

2 ответа


0

вы можете добавить 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, вы можете получить объект enum из значения. используя метод toString, вы можете получить значение объекта enum. map будет содержать значение для сопоставления объекта enum. Если значение типа null или empty space соответствует не существует в карте, карта вернет ноль, и в этом случае метод fromValue вернет UNKNOWN enum object.

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());
ответил dku.rajkumar 10 SatEurope/Moscow2011-12-10T10:46:27+04:00Europe/Moscow12bEurope/MoscowSat, 10 Dec 2011 10:46:27 +0400 2011, 10:46:27
0

Вы можете использовать значение по умолчанию, чтобы установить для столбца поле NULL enum в вашей сущности.

@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

Кстати, я бы назвал перечислимые поля НЕИЗВЕСТНЫМИ, потому что их можно было бы спутать с NULL-значением БД.

ответил stacker 10 SatEurope/Moscow2011-12-10T10:20:05+04:00Europe/Moscow12bEurope/MoscowSat, 10 Dec 2011 10:20:05 +0400 2011, 10:20:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132