2016-08-26 2 views
2

У меня есть класс перечислимого типа, как это -перечисления следует хранить в БД

public enum FeedbackStatus { 
    @JsonProperty("unprocessed") 
    UNPROCESSED("unprocessed"), 

    @JsonProperty("arrived") 
    ARRIVED("arrived"), 

    @JsonProperty("performed") 
    PERFORMED("performed"), 

    @JsonProperty("cancelled") 
    CANCELLED("cancelled"), 

    @JsonProperty("removed") 
    REMOVED("removed"), 

    @JsonProperty("no-show") 
    NO_SHOW("no-show"), 

    @JsonProperty("cancel-at-door") 
    CANCEL_AT_DOOR("cancel-at-door"); 

    private static final FeedbackStatus[] myEnumValues = FeedbackStatus.values(); 
    private final String fieldDescription; 

    private FeedbackStatus(String value) { 
     this.fieldDescription = value; 
    } 

    public static FeedbackStatus fromString(String string) { 
     if (!TextUtils.isEmpty(string)) { 
      for (FeedbackStatus feedbackStatus : myEnumValues) { 
       if (feedbackStatus.getString().equalsIgnoreCase(string)) { 
        return feedbackStatus; 
       } 
      } 
     } 
     throw new IllegalArgumentException("No constant with text " + string + " found"); 
    } 

    public String getString() { 
     return this.fieldDescription; 
    } 
} 

Мне нужно хранить объект feedback в базе данных SQLite с помощью GreneDAO но объект является перечислением и, следовательно, я не могу сохранить его , Объект подобен -

private FeedbackStatus feedback; 

Как сохранить его в виде строки?

ответ

0

Использовать для ex. CANCELLED.value? При хранении данных? Существует также ENUM.toString(). Вы можете сохранить его как String, а затем обернуть восстановление данных с помощью метода String to Enum.

0

Вы не можете хранить enums в базе данных enumns являются Java сущность, поэтому для перечислений необходимо хранить их эквивалентные значения либо String или int т.д.

Вы можете получить value из enum, как показано ниже, и чем хранить его в database в Strings:

String PERFORMED = PERFORMED.value; 
String CANCELLED= CANCELLED.value; 
String REMOVED= REMOVED.value; 
String NO_SHOW= NO_SHOW.value; 
String CANCEL_AT_DOOR= CANCEL_AT_DOOR.value; 

Для более подробной информации о Перечисления см Java Docs here

Итак, на самом деле ваша модель данных в порядке, но при сохранении enum в базе данных вам нужен только один столбец с значением перечисления, а при вставке вам нужно преобразовать из перечисления в его строковое значение и при чтении с db вам нужно построить перечисление из этой строки.

Надеюсь, это поможет!

+0

Как это сделать в моем примере –

+0

Это для получения значений. Для хранения значений, следует ли хранить его отдельно, как для каждой строки PERFORMED, CANCELED ..? –

+0

Я обновил свой ответ, пожалуйста, проверьте –

Смежные вопросы