В наших приложениях довольно распространенная ситуация: какой-то объект должен быть представлен перечислением: например, типы, категории, статус и тому подобное.
Часто в коде существуют условия или потоки, которые используют значения для принятия решения между одним действием или другим, поэтому значения должны быть "известны" каким-либо образом для приложения (т.е. он должен иметь возможность ссылаться на конкретный экземпляр для решения вместо ссылки на класс в целом). Вот почему мы используем перечисления вместо обычного класса.
Проблема заключается в том, что эти объекты также должны храниться (или, по крайней мере, ссылаться) в базе данных, как поля других объектов. Обычно мы создаем таблицу для каждого объекта, чтобы иметь возможность проводить проверки целостности ссылок в этих столбцах, а также то, что данные имеют "значение" в базе данных самостоятельно, без необходимости ссылаться на перечисление, чтобы узнать, что означает каждый идентификатор.
В идеале данные для этих объектов должны быть заполнены из данных в перечислении, но в наши дни мы имеем значения, дублированные в сценариях инициализации db.
Это становится немного сложнее, когда используется ORM, например Hibernate.
Я хотел бы знать, как другие люди справляются с такой ситуацией.
Мне не совсем нравится идея дублирования между перечислением и таблицей базы данных, но пока я не нашел лучшего решения.