Как сопоставить классы в Hibernate, которые имеют только поведение?

Я сопоставляю некоторые классы в спящем режиме, эти классы в основном представляют собой шаблон стратегии. У меня есть класс «Пользователь», который знает абстрактный класс «UserType», который объявляет абстрактный метод «purchaseSomething()», подклассы переопределяют этот метод. На данный момент я сопоставляю все классы как объекты, поэтому у меня есть три таблицы. Каждый раз, когда пользователь отправляет данные в систему, когда я сохраняю пользователя, это сохраняет его экземпляр подкласса UserType в таблицах. Я хочу, чтобы у него была одна таблица с именем «UserTypes», в которой есть только два столбца «id» и «type», поэтому каждый пользователь «Admin» будет указывать на одну и ту же строку в таблице, каждый пользователь «Customer» будет указывать на та же строка в таблице, вместо того, что у меня уже есть, где пользователь «Администратор» указывает на строку с идентификатором 23435 в таблице «AdminUser», а другой пользователь «Администратор» указывает на строку с идентификатором 54234 в таблице «AdminUser» .

Спасибо, любой совет будет полезен.


person 4gus71n    schedule 17.11.2012    source источник


Ответы (1)


Для шаблона чистой стратегии рассмотрите возможность создания типа Enum и используя аннотацию JPA Enumeration. Вы по-прежнему можете передавать абстрактные методы Enum чтобы заполнить ваши стратегии.

Однако похоже, что вы действительно можете хранить данные отдельно об администраторах и клиентах. Если пользователь является Клиентом или Администратором, но не обоими, создайте подклассы и используйте присоединенный подкласс. Если пользователь может быть и тем, и другим, возможно, вам просто нужно сопоставление отношений один к одному.

person Jeff Bowman    schedule 17.11.2012