Если я вас правильно понимаю, для перечисления вроде:
public enum Color { RED, GREEN, BLUE; }
в базе данных будет 3 столбца true / false, по одному на каждое возможное значение enum. Затем EnumSet
, содержащий, скажем, КРАСНЫЙ и СИНИЙ, должен быть сопоставлен с:
RED GREEN BLUE
true false true
Если это так, единственный известный мне способ - написать собственную реализацию org.hibernate.usertype.UserType
. Это довольно простая задача, с некоторыми примерами, доступными на сайте Hibernate, и, например, здесь .
Редактировать : Я просто понял, что все должно быть несколько сложнее. Если вы хотите, чтобы в вашем приложении было одно отображение типов Hibernate для всех возможных EnumSet
, вам нужно будет сделать следующее:
- Используйте
org.hibernate.usertype.ParameterizedType
и сделайте параметризацию пользовательского типа классом enum.
- В зависимости от значений класса enum определите, сколько и какие столбцы нужно читать / записывать.
- Использовать тип каждый раз, когда используется
EnumSet
.
- Рассмотрим возможность отображения нескольких наборов в одной таблице, а также то, как добавление нового значения enum повлияет на работу существующего типа.
Это может легко составить полный рабочий день, но кажется вполне выполнимым. Надеюсь, вы это выясните отсюда.