Чтобы уточнить - тег может быть закреплен на многих объектах, а объект может иметь много тегов. Вот что для меня значат отношения "многие ко многим". Вы это имеете в виду?
Когда вы делаете это в SQL, у вас есть таблицы с именами TAG и OBJECT и объединенная таблица с именем TAG_OBJECT, которая содержит два столбца, по одному для каждого первичного ключа в других таблицах. Первичный ключ в таблице соединения TAG_OBJECT - это пара (TAG_ID, OBJECT_ID). Это гарантирует уникальное сочетание для каждой строки.
Если вы используете Hibernate, вы просто добавляете список или коллекцию объектов в качестве частного члена данных в свой класс Tag, а список или коллекцию тегов в качестве частного члена данных в свой класс Object.
Я думаю, Hibernate справится с вашим «только в том случае, если он не существует», если вы напишете хороший метод для определения «глубокого равенства» между двумя экземплярами Tag.
Вы также должны добавить уникальное ограничение к атрибуту заголовка тега. Вот пример, который вам не совсем подходит, потому что это Java и XML, но, возможно, этой подсказки будет достаточно, чтобы подсказать вам, где искать NHibernate:
<element column="serialNumber" type="long" not-null="true" unique="true"/>
В вашем случае столбец будет заголовком тега, тип - строкой, а остальные флаги останутся такими же, как в примере.
person
duffymo
schedule
19.06.2009