Это не так (сопоставьте набор с булевыми столбцами). Но вот несколько вариантов. Я думаю, что оба варианта требуют отображения отдельных логических значений в классе сущностей. Я хочу быть предельно ясным: правильный способ отобразить это - иметь таблицу зависимостей, а затем связать таблицы. Если позже вы захотите добавить дополнительную зависимость, это просто вставит новую строку, а не изменит структуру базы данных.
Измените интерфейс вашего класса, чтобы получить / установить для каждого логического значения, каждый метод set
затем добавляет или удаляет значение из Set
, которое не сохраняется. Set
можно изменить только из логических методов set
. И вам, вероятно, нужно использовать метод жизненного цикла @PostLoad для заполнения набора после загрузки сущности.
В основном наоборот: Set
предоставляется только с помощью нескольких вспомогательных методов addAddiction(Addiction)
и removeAddiction(Addiction)
. Эти методы внутренне обновляют логические значения, которые никак не отображаются. Таким образом, из интерфейса класса у вас есть только Set
.
Последний вариант, но это немного продвинутый подход (так что больше вуду), это использовать CompositeUserType
. Вы также можете найти здесь несколько примеров того, как создать этот класс: пример 1 , пример 2 .
Я бы порекомендовал держаться подальше от CustomUserType, так каквсе может быть очень сложно, если, например, вы хотите запросить все строки с помощью addiction = Alcohol
. И, пожалуйста, рассмотрите возможность сопоставления зависимостей с их собственной таблицей. Ваше будущее я (или будущие сопровождающие) это оценят.