Перечисляет в строку в MYSQL, используя Spring - PullRequest
0 голосов
/ 18 августа 2011

Я использую Spring (в частности, Roo) для разработки приложения, и для одной сущности у меня есть выпадающий список, основанный на наборе перечислений (т.е. enum (Blue, Pink, Red)).При сохранении в базе данных MYSQL эти перечисления хранятся в виде чисел (очевидно).Я хочу, чтобы они сохранялись как фактические строковые значения вместо чисел в базе данных (поэтому в MYSQL я хочу, чтобы «pinK» находился под «color» вместо просто «2». Возможно ли это? Спасибо

edit:

Позвольте мне попытаться задать это по-другому. Скажем, когда я получаю данные из MYSQL. Вместо символьных значений, которые я хочу, фактические слова есть ли способ сделать это?

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Я бы попробовал пометить ваше поле с помощью аннотации @Enumerated (EnumType.STRING), например:

@Enumerated(EnumType.STRING)
private MyEnumType myEnumField;
0 голосов
/ 18 августа 2011

Вы можете сохранить значения в виде текста, а затем использовать триггер вставки, чтобы проверить, что сохраненные значения являются одним из допустимых значений (поскольку MySQL не поддерживает проверочные ограничения).

Вы также можете индексироватьминимальное количество символов, чтобы обеспечить уникальность, чтобы уменьшить накладные расходы на индексирование.В вашем примере вам нужно всего лишь индексировать первый символ, поскольку «B», «P» и «R» уникальны.Если вы добавите «Коричневый» в список, вам нужно будет проиндексировать первые два символа («Bl», «Pi», «Re», «Br»).


РЕДАКТИРОВАТЬ

Мое первоначальное предложение состояло в том, чтобы сохранить значения в виде их фактических текстовых представлений, а не в виде числа.добавьте таблицу 'colors':

id     INT
name   VARCHAR

Тогда ваш столбец enum будет внешним ключом таблицы цветов.Затем, когда вы сделаете свой выбор:

SELECT ...,colors.name AS color
FROM table t
JOIN colors c ON t.color = c.id
...