Как обрабатывать дублирование между java enum и таблицей базы данных?

В наших приложениях довольно распространенная ситуация: какой-то объект должен быть представлен перечислением: например, типы, категории, статус и тому подобное.

Часто в коде существуют условия или потоки, которые используют значения для принятия решения между одним действием или другим, поэтому значения должны быть "известны" каким-либо образом для приложения (т.е. он должен иметь возможность ссылаться на конкретный экземпляр для решения вместо ссылки на класс в целом). Вот почему мы используем перечисления вместо обычного класса.

Проблема заключается в том, что эти объекты также должны храниться (или, по крайней мере, ссылаться) в базе данных, как поля других объектов. Обычно мы создаем таблицу для каждого объекта, чтобы иметь возможность проводить проверки целостности ссылок в этих столбцах, а также то, что данные имеют "значение" в базе данных самостоятельно, без необходимости ссылаться на перечисление, чтобы узнать, что означает каждый идентификатор.

В идеале данные для этих объектов должны быть заполнены из данных в перечислении, но в наши дни мы имеем значения, дублированные в сценариях инициализации db.

Это становится немного сложнее, когда используется ORM, например Hibernate.

Я хотел бы знать, как другие люди справляются с такой ситуацией.

Мне не совсем нравится идея дублирования между перечислением и таблицей базы данных, но пока я не нашел лучшего решения.

Ответ 2

У меня такая же проблема для моего приложения JPA/Hibernate. То, что я делаю, динамически создает запись перечисления в базе данных по мере их возникновения. В этом он автоматически заполнялся по мере необходимости.