У меня есть пара таблиц, которые я хочу сопоставить с классами. Таблицы выглядят так:
Asset
---------
AssetId
AssetName
Product
---------
ProductId
ProductName
AssetId
Disposal
---------
DisposalId
AssetId
DisposalDate
В основном то, что я хочу сделать, это присоединить таблицу продуктов к таблице утилизации на AssetId, чтобы в моем продукте была коллекция удалений, объединенных активом. Я определил следующее сопоставление, но NHibernate (1.2), похоже, игнорирует ключевой столбец, определенный в сумке, и выбирает присоединение таблицы Product к таблице Disposal по ProductId (т.е. Product.ProductId = Disposal.AssetId). Я не уверен, является ли это ошибкой или я неправильно ее определяю, но если у кого-то есть способ сделать это, я был бы очень рад.
<class name = "Product" table = "Product" lazy = "false">
<id name = "ProductId" column = "ProductId" type = "int">
<generator class = "native" />
</id>
<property name = "ProductName" column = "ProductName"/>
<bag name = "Disposals" fetch = "join" >
<key column = "AssetId" foreign-key = "AssetId/>
<many-to-many class = "Disposal"/>
</bag>
</class>





Есть ли у вас привязка к продуктам?
Ваша схема не уникальна в отношении утилизации к продукту. Выбытие может относиться только к Активу, но не к Продукту.
Ваша схема говорит мне, что у актива много продуктов, а у актива много выбытий. Нет ничего, что говорило бы о том, что утилизация предназначена для конкретного продукта.
Чистый способ:
<class name = "Product" table = "Product" lazy = "false">
<id name = "ProductId" column = "ProductId" type = "int">
<generator class = "native" />
</id>
<property name = "ProductName" column = "ProductName"/>
<many-to-one name name = "Asset" class = "Asset" column = "AssetId" />
</class>
<class name = "Asset">
<id name = "AssetId" >
<generator class = "native" />
</id>
<property name = "AssetName" />
<bag name = "Disposals">
<key column = "AssetId" />
<many-to-many class = "Disposal" />
</bag>
</class>
внешний ключ используется для DDL, я думаю, это имя ограничения внешнего ключа, созданного при экспорте схемы.
Вы можете попробовать свойство-ref, не совсем уверен, что он работает:
<class name = "Product" table = "Product" lazy = "false">
<id name = "ProductId" column = "ProductId" type = "int">
<generator class = "native" />
</id>
<property name = "ProductName" column = "ProductName"/>
<property name = "AssetId" />
<bag name = "Disposals" fetch = "join" >
<key column = "AssetId" property-ref = "AssetId/>
<one-to-many class = "Disposal"/>
</bag>
</class>