Я бы предложил начать с трех Entities
, один для тегируемого объекта (в случае с примером SO, это будет Post
), один для хранения определений вашего тега (вы можете просто назовите это Tag
) и один для отображения между двумя (назовите это TaggedPost
).
Тогда базовый процесс присвоения Tag
для Post
выглядит примерно так:
- Посмотрите, существует ли уже
Tag
с данным именем, если да, используйте существующее, в противном случае вставьте новое.
- Создайте новый экземпляр
TaggedPost
, который связывает Post
с Tag
с шага 1.
Чтобы удалить Tag
из Post
, просто удалите соответствующий TaggedPost
объект.
Вы можете использовать аннотации Hibernate, чтобы представить набор тегов, которые применяются к данному Post
, как коллекцию Java, так что вы можете просто сказать getTags()
, чтобы получить все теги. И вы можете сделать то же самое на Tag
, чтобы вы могли сказать getPosts()
, чтобы получить все сообщения, которые имеют Tag
.