Отображение «многие ко многим» без таблицы объединения в Hibernate / NHibernate - PullRequest
2 голосов
/ 11 января 2010

У меня есть две таблицы:

CalendarEntry
  Id
  Date
  ...

Holiday
  Id
  Date
  ...

В моем классе CalendarEntry у меня есть свойство, подобное этому

public ISet<Holiday> Holidays { ... }

, который я хочу связать с Holiday экземплярами, которые происходят на том же Date, что и CalendarEntry. Однако я не могу придумать, как это сделать.

Я пытался отобразить его как один-ко-многим, но один-ко-многим автоматически предполагает, что он должен выполнить соединение, используя столбец CalendarEntry Id (предположительно, поскольку это единственное свойство, которое гарантировано быть уникальным, который должен быть один-ко-многим).

Я пытался отобразить его как «многие ко многим», но кажется, что многим для многих требуется отдельная таблица соединений, чего в данном случае я не хочу.

Мой вопрос: возможно ли отобразить это в NHibernate, и как мне это сделать? Если это невозможно, почему?

Ответы [ 3 ]

1 голос
/ 11 января 2010

Вы должны быть в состоянии сделать это, используя свойство-ref, которое, я считаю, доступно в NHibernate 2.1. Я нашел его в тексте ссылки , а вот jira для добавления его в NHibernate.

Я не уверен, что это сработает для столбца даты, и вам определенно не повезет, если ваше поле даты содержит данные о времени.

Вы всегда можете оставить отношения вне модели и получить доступ к коллекции с помощью метода репозитория, т.е. GetHolidaysForDate. Это будет иметь больше смысла для меня, так как праздники отличаются от записей календаря и конкретной культуры. Если вы не используете неамериканское значение, эквивалентное «отпуск».

1 голос
/ 11 января 2010

Я думаю, вам нужно настроить запрос для получения записей о праздниках. Я не уверен, что это можно сделать с помощью сопоставления.


Дополнительная информация из моего первоначального ответа, которая может не применяться: вы можете иметь отношение многие ко многим в NHibernate без создания отдельного класса сущностей для записей таблицы объединения, но базовые данные все еще должны существовать где-то в базы данных.

0 голосов
/ 12 января 2010

Вы можете создать представление базы данных (или запрос производной таблицы), содержащее соответствующие идентификаторы из CalendarEntry и Holiday, а затем отобразить отношение многие-ко-многим, используя представление - это технически исключает наличие таблицы соединения, в то время как позволяя NHibernate работать так, как он хочет.

Вы хотите убедиться, что NHibernate не пытается обновить коллекции (возможно, некоторая комбинация inverse="true" и cascade="none") и избегать их изменения в коде - я полагаю, что вы согласны с этим, если вы вообще не хочу столик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...