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