Как контролировать размер столбца для перечислений? - PullRequest
0 голосов
/ 29 сентября 2011

Это с EclipseLink через JPA, где я позволил ему создавать таблицы для меня.Внутренняя база данных - это Derby для режима разработки, и я ожидаю использовать MySQL или что-то еще для развертывания.

В моей сущности у меня есть enum:

@Entity
public class Thing implements Serializable {

    public enum Choice { Able, Baker, Charlie, Delta }

    @Column(precision = 1)
    private Choice  choiceValue;

    // etc
}

Только порядковый номер enumнужна одна цифра, но когда таблица создается, она выделяет для нее 10 цифр.Таким образом, миллион записей будет тратить 9 мегабайт.Термин «точность = 1» игнорируется.

Есть ли способ заставить его использовать только один байт для кодирования перечисления?

1 Ответ

2 голосов
/ 29 сентября 2011

Установка масштаба или точности для столбца Integer, в котором enum отображается в Derby & EclipseLink, не помогает.Это ничего не делает, вы все равно получите INTEGER.Вы можете иметь больше контроля со следующим.

@Column(columnDefinition = "SMALLINT") //smallint= 2 bytes or
//@Column(columnDefinition = "NUMERIC(1)") //
private Choice  choiceValue;

Это сработало для меня, но в основном Java-тип для NUMERIC - BigDecimal, а для SMALLINT - короткий, возможно, в некоторых случаях это может вызвать проблемы.Например, нативные запросы будут возвращать BigDecimal для choiceValue-столбца.

Какой объем памяти требуется, зависит от поставщика базы данных, какой-то более старый хранимый символ MySQL на цифру, теперь это выглядит довольно точно настроенным: http://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-changes.html Я не знаю, как именно в Дерби, но я бы предположил, что это занимает не более байта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...