Я пытаюсь сохранить массив enum, используя Hibernate. Важно отметить, что если это возможно, я бы предпочел не использовать коллекцию. Ответы, которые я нашел в Интернете до сих пор, предназначены для хранения коллекций, а не массивов.Как сохранить массив enum в hibernate
Я получаю сообщение об ошибке, в котором говорится о недостатке @OrderColumn или @IndexColumn. Я не хочу, чтобы массив упорядочивался по алфавиту. Я хочу, чтобы он был возвращен в том же порядке.
Перечисление буквально прост, как вы могли бы просить, но Enum.name() не в алфавитном порядке, поэтому не существует естественного столбца «Заказ».
@Embeddable
public enum SudokuPossibleValueState {
UNDEFINED, UNKNOWN, IMPOSSIBLE, POSSIBLE, COMMITTED, AS_PUBLISHED;
public String toString() {
return name().toLowerCase();
}
}
По определению, я использую фактическое положение в массиве, чтобы указать число, которое я рассматриваю, и перечисление определяет состояние оценки для этого числа. Например, типичный массив может быть ...
[0] = UNDEFINED,
[1] = UNDEFINED,
[2] = POSSIBLE,
[3] = POSSIBLE,
[4] = UNKNOWN,
[5] = UNKNOWN,
[6] = UNKNOWN,
[7] = IMPOSSIBLE,
[8] = IMPOSSIBLE,
[9] = IMPOSSIBLE.
Но проблема я встречая, что все примеры, которые я могу найти в Интернете, а также документации по Hibernate, кажется, только для решения ситуации, когда вы использование коллекции Java; что я не пытаюсь сделать.
@Entity
@Table(name = "SudokuPossibleValues")
public class SudokuPossibleValuesModel {
public static final int NUMBER_OF_POSSIBLE_VALUES_PLUS_ONE = 10;
@Id
@GeneratedValue
private long possibleValuesID;
@ElementCollection
@Enumerated(EnumType.STRING)
private SudokuPossibleValueState stateValues[] = new SudokuPossibleValueState[NUMBER_OF_POSSIBLE_VALUES_PLUS_ONE];
...
}
FWIW «Перечисление» не является '@ Embeddable'. Это базовый тип. –
Спасибо. Это было полезно; удалив его, по крайней мере, изменили ошибки, которые я получал. В конце концов, я просто сдался и сделал хакер, описанный ниже. –