NHibernate Множество ко многим сопоставлениям с дополнительными столбцами в таблице сопоставлений
Существуют две таблицы Person и Address. У меня есть таблица сопоставления PersonAddressMap, которая содержит дополнительный столбец IsCurrent, отличный от двух внешних ключей (без явного столбца первичного ключа). Я создал три класса отображения по одному для Person, Address и PersonAddressMap. Мне нужно получить доступ ко всем Адресам Лица, а также получить доступ ко всем Лицам, у которых есть конкретный адрес из Адреса, поэтому у меня есть PersonAdressMap один-ко-многим в классе Person и Address. Теперь проблема двунаправленная ассоциация создает бесконечное число. Если я удалю одну из ассоциаций, загрузка будет работать нормально, но Save не будет вставляться в таблицу сопоставления (например: если у меня есть только одна ассоциация от Person to PersonAddressMap и попытайтесь вставить нового человека с новым адресом, тогда только Person вставлен.). Файлы сопоставления выглядят следующим образом:
<class name="Person" table="Person"> <id name="Id"> <column name="Id" sql-type="int" not-null="true" /> <generator class="identity" /> </id> <property name="Name" column="Name"/> <bag name="AddressDetails" table="PersonAddressMap" cascade="all" > <key column="PersonId" /> <one-to-many class="PersonAddressMap" /> </bag> </class> <class name="Address" table="Address"> <id name="Id"> <column name="Id" sql-type="int" not-null="true" /> <generator class="identity" /> </id> <property name="City" column="City"/> <bag name="PersonDetails" table="PersonAddressMap" cascade="all" > <key column="AddressId" /> <one-to-many class="PersonAddressMap" /> </bag> </class> <class name="Job" table="Job" lazy="false"> <composite-id> <key-many-to-one column="PersonId" name="Person" /> <key-many-to-one column="AddressId" name="Address" /> </composite-id> <property name="IsCurrent" column="IsCurrent"/> </class>
Заранее спасибо.
- Расширение Nhibernate для использования «внутреннего удаленного соединения» в выборке или сопоставлении
- nHibernate-отображение с помощью составного ключа и коллекции
- Отображение даты в Sql DateTime
- Хранение набора значений Integer в Sql Server 2005 с nHibernate?
- Как сопоставить SQL Server `varbinary (max)` поле с отображением NHibernate ByCode?
- Объединенный подкласс NHibernate
- Использование сопоставления NHibernate по коду: нельзя вставить явное значение для столбца идентификатора в таблице «DietUser», если для параметра IDENTITY_INSERT установлено значение OFF
- Свободная версия SQL Server 2008 R2 Express очень длительная проблема с сохранением строки
отношения «многие ко многим» ВСЕГДА требуют, чтобы вы отметили одну конечную точку отношения с обратным. В вашем конкретном примере вы можете использовать AddressDetails of Person. например
<bag name="AddressDetails" table="PersonAddressMap" cascade="all" inverse="true"> <key column="PersonId" /> <one-to-many class="PersonAddressMap" /> </bag>
Когда я использую inverse = 'true', значения таблицы соединений (т.е. PersonAddressMap) не вставлены.
Если я устанавливаю inverse = 'false', они встают, но я также вижу, что инструкции delete встречаются в sql